在工具/异常中,我设置了在引发异常时调试器停止的选项。是否被抓住。
如何排除该规则的例外?我的代码中某个地方有一个捕获的异常,它是程序逻辑的一部分。因此,我显然不希望该异常在每次被击中时都停止调试器。
示例:我想忽略第344行的nullreference异常(已捕获)。我想停止其他所有例外
在工具/异常中,我设置了在引发异常时调试器停止的选项。是否被抓住。
如何排除该规则的例外?我的代码中某个地方有一个捕获的异常,它是程序逻辑的一部分。因此,我显然不希望该异常在每次被击中时都停止调试器。
示例:我想忽略第344行的nullreference异常(已捕获)。我想停止其他所有例外
Answers:
如果我没记错的话,您可以DebuggerStepThrough
在方法中使用一个属性,该属性包含您不希望引发异常的代码。我想您可以在方法中隔离引发烦人异常的代码,并用属性对其进行修饰。
DebuggerStepThrough
属性不会影响调试器的优先机会异常行为。
DebuggerStepThrough
属性对CLR没有意义。它由调试器解释。似乎它不能在各种情况下可靠地工作,并且DebuggerHidden
可以可靠地工作stackoverflow.com/a/3455100/141172
DebuggerHidden
是你的朋友!
公共语言运行库不向该属性附加语义。提供它供源代码调试器使用。例如,Visual Studio 2005调试器不会在带有此属性标记的方法中停止,并且不允许在该方法中设置断点。Visual Studio 2005调试器可以识别的其他调试器属性是DebuggerNonUserCodeAttribute和DebuggerStepThroughAttribute。
在VS2010上测试,效果很好。
虽然DebuggerStepThrough
似乎也适用于某些特定的调试器版本,但DebuggerHidden
根据对两个答案的注释,似乎适用于更广泛的情况。
请注意,这两个选项当前均不适用于迭代器块方法或async / await方法。可以在以后的Visual Studio更新中修复此问题。
DebuggerHidden
...
DebuggerStepThrough是用于防止调试器闯入有try / catch方法的程序。
但是,只有在您未取消选中Visual Studio调试选项的常规设置(菜单工具/选项,节点调试/常规)中的“仅启用我的代码(仅受管理)”选项时,此选项才起作用。
有关该属性的详细信息,请访问http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden只会阻止Debugger显示引发异常的方法。相反,它将在堆栈上显示未用该属性标记的第一个方法...
DebuggerNonUserCode
在Visual Studio 2015中,默认情况下,其他答案中指定的属性(以及其他属性,例如属性)不再以相同的方式起作用。调试器将打破具有这些属性的方法市场中的异常,这与VS的旧版本不同。要关闭更改其行为的性能增强功能,您需要更改注册表设置:
reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
可以在visual studio博客上找到更多信息。
(这可能是对最佳答案的评论,但是我没有足够的代表)
您无法选择在代码中特定位置抛出的异常。但是,您可以禁用特定类型的肽段。
如果您自己的代码引发了有关异常的问题,我将使其成为自定义异常,从任何合适的位置派生,然后在此派生类型上禁用调试中断。
将系统实例禁用为NullReferenceException将影响整个系统,这当然在开发过程中是不可取的。
请注意,异常有两种中断行为:
您可以删除NrowReferenceException的“ Thrown”检查,这将使您不必每次系统通过代码中有问题的行时都不会中断,但如果在其他部分发生了一些未处理的NullReference期望,仍可以中断系统。