在工具/异常中,我设置了调试器在抛出异常时停止的选项。是否被抓住。
如何排除该规则的例外情况?在我的代码中的某处有一个被捕获的异常,它是程序逻辑的一部分。因此,我显然不希望该异常在每次命中时都停止调试。
示例:我想忽略第344行的null引用异常(捕获)。我想停止所有其他例外
答案 0 :(得分:63)
DebuggerHidden
是你的朋友!
公共语言运行库不向此属性添加语义。它供源代码调试器使用。例如,Visual Studio 2005调试器不会在标有此属性的方法中停止,并且不允许在方法中设置断点。 Visual Studio 2005调试器识别的其他调试器属性是DebuggerNonUserCodeAttribute和DebuggerStepThroughAttribute。
在VS2010上测试过,效果很好。
虽然DebuggerStepThrough
似乎也适用于某些特定的调试器版本,但DebuggerHidden
似乎适用于基于对两个答案的注释的更广泛的情况。
请注意,这两个选项目前不适用于iterator block methods或async/await methods。这可以在稍后的Visual Studio更新中修复。
答案 1 :(得分:38)
如果我没记错,你可以在包含代码的方法上使用DebuggerStepThrough
属性,而不需要触发异常。我想你可以隔离在方法中触发恼人异常的代码并用属性装饰它。
答案 2 :(得分:14)
DebuggerStepThrough用于防止调试器在有try / catch的方法中断。
但是只有在Visual Studio的调试选项的常规设置(菜单工具/选项,节点调试/常规)中没有取消选中“仅启用我的代码(仅管理)”选项时,它才有效... < / p>
有关http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
上该属性的更多信息DebuggerHidden将阻止调试器显示抛出异常的方法。相反,它将在堆栈上显示第一个未标记该属性的方法......
答案 3 :(得分:12)
在Visual Studio 2015中,默认情况下,其他答案中指定的属性(以及DebuggerNonUserCode
属性等其他答案)不再以相同的方式工作。调试器将使用这些属性打破方法市场中的异常,不像在旧版本的VS.要关闭改变其行为的性能增强,您需要更改注册表设置:
reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
可以在visual studio blog上找到更多信息。
(这应该是对最佳答案的评论,但我没有足够的代表)
答案 4 :(得分:3)
您无法挑出代码中特定位置抛出的异常。但是,您可以禁用特定类型的exeptions。
如果你自己的代码抛出了有问题的异常,我会把它作为一个自定义异常,从任何拟合派生出来,然后在这个派生类型上禁用debug break。
由于NullReferenceException禁用系统溢出会影响整个系统,这当然在开发过程中是不可取的。
请注意,异常有两种中断行为:
您可以删除NullReferenceException的'Thrown'中的检查,这样可以避免每次系统在代码中传递有问题的行时都不会中断,但如果你在其他地方遇到一些未处理的NullReference,则仍然会中断系统的一部分。