在Visual Studio中有没有一种方法可以不在抛出特定异常时中断调试?

14

是否有任何Pragma或调试器属性可以使调试器不在抛出特定异常时中断,即使在Debug >> Exceptions菜单下我已经告诉它在任何CLR异常被抛出时都要中断?

通常在开发过程中,我喜欢在调试时中断异常,以便立即检查它们。有时候有一些特殊情况,在这些情况下已知某些代码块偶尔会抛出异常并已用try-catch进行处理。请参见这个问题的答案,共识是try-catch是最正确的情况。

我想能够在方法上设置一个属性(类似于System.Diagnostics.DebuggerHiddenAttribute),该属性忽略在方法中抛出的任何异常。

顺便说一句,我目前在Visual Studio 2008中遇到了这个问题,但我猜想对所有版本都有答案或者没有答案。

1个回答

13

直接答案可以在Debug菜单的“Exceptions”菜单项下找到。这是每个解决方案/项目的设置。(Tools > Option > Debugging是系统范围的设置。)有关详细信息,请参阅帮助主题“Visual Studio Debugger, How to: Break When an Exception is Thrown”,位于http://msdn.microsoft.com/en-us/library/d14azbfh.aspx。异常对话框允许您设置哪些异常会被抛出,或者哪些异常会进入调试器。

我发现我更喜欢使用DebuggerStepThrough属性。

通常情况下,我将异常抛出保持默认状态(Debug > Exceptions中选中“User-unhandled”并取消选中“Thrown”),并为不需要逐步执行方法或不希望在该方法中抛出任何异常的方法添加DebuggerStepThrough属性。我很少使用DebuggerHidden,在库代码中使用DebuggerNonUserCode更加有用。


“Debug” >> “Exceptions” 实际上是我启用的菜单(“Tools” 是一个打字错误)。我想在所有异常中断,除了这个特定的异常实例(例如 IOException 或其他一些常见的异常,因此我不能将它们全部关闭)。看起来 DebuggerStepThroughAttribute 就是我要找的答案。我没想到它也会影响异常。谢谢! - mckamey
1
额外信息:DebuggerStepThrough 仅抑制在该方法中直接引发的异常,它不会抑制调用堆栈较低处引发的任何异常。 - Steve Cooper
我不知道最近是否有所改变(可能是在VS2015中?)——但我有一个异常在我的方法中被捕获和处理,没有异常被重新抛出——该方法具有“DebuggerStepThrough”属性,但它仍然停止——(尽管在堆栈中向上一级)——当我按F10时,它像平常一样转到下一行——但为什么它会在那里停止呢?该方法没有重新抛出任何东西,但DebuggerStepThrough的行为就像它冒泡出来了...——我可能会尝试一些其他提到的属性。 - BrainSlugs83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接