当它被抛出并被捕获时,不要停止调试器

Mic*_*elD 91 .net c# debugging .net-3.5 visual-studio-2008

在工具/异常中,我设置了调试器在抛出异常时停止的选项.是否被抓住.

如何排除该规则的例外?在我的代码中的某处有一个被捕获的异常,它是程序逻辑的一部分.所以我显然不希望该异常在每次命中时停止调试器.

示例:我想忽略第344行的nullreference异常(捕获).我想停止所有其他例外

Shi*_*mmy 64

DebuggerHidden 是你的朋友!

公共语言运行库不向此属性附加语义.它供源代码调试器使用.例如,Visual Studio 2005调试器不会在标有此属性的方法中停止,并且不允许在方法中设置断点.Visual Studio 2005调试器识别的其他调试器属性是DebuggerNonUserCodeAttribute和DebuggerStepThroughAttribute.

在VS2010上测试过,效果很好.

虽然DebuggerStepThrough似乎也适用于某些特定的调试器版本,但DebuggerHidden似乎适用于基于对两个答案的注释的更广泛的情况.

请注意,这两个选项当前不适用于迭代器块方法async/await方法.这可以在以后的Visual Studio更新中修复.

  • 我将该属性添加到一个方法中,调试器只是停止在它的调用方法上。我错过了什么吗? (2认同)

小智 40

如果我没记错的话,你可以DebuggerStepThrough在包含代码的方法上使用一个属性,你不需要触发异常.我想你可以隔离在方法中触发烦人异常的代码并用属性装饰它.

  • 从malinger的答案和我的经验来看,这个答案似乎是不正确的.`DebuggerStepThrough`属性不会影响调试器的第一次机会异常行为. (31认同)
  • 根据MSDN,`DebuggerStepThrough`属性对CLR没有意义.它由调试器解释.似乎它在各种情况下都不能可靠地工作,并且`DebuggerHidden`将可靠地工作http://stackoverflow.com/a/3455100/141172 (8认同)
  • **重要说明:**这不适用于async-await类型方法.更多[这里](http://stackoverflow.com/q/24433331/885318) (6认同)
  • @Tim,我测试了它并没有停止.结帐我的回答:http://stackoverflow.com/questions/1420390/3455100#3455100 (5认同)

Val*_*oye 14

DebuggerStepThrough是用于防止调试器在有try/catch的方法中中断的方法.

但只有在Visual Studio的调试选项的常规设置(菜单工具/选项,节点调试/常规)中未取消选中"仅启用我的代码(仅管理)"选项时,它才有效...

有关该属性的更多信息,请访问http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/

DebuggerHidden将简单地阻止调试器显示抛出异常的方法.相反,它将显示堆栈上没有标记该属性的第一个方法...


bhh*_*bhh 12

DebuggerNonUserCode默认情况下,在Visual Studio 2015 中,其他答案(以及其他属性)中指定的属性不再以相同的方式工作.与旧版本的VS不同,调试器将在具有这些属性的方法市场中的异常中断.要关闭改变其行为的性能增强,您需要更改注册表设置:

reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
Run Code Online (Sandbox Code Playgroud)

更多信息可以在visual studio博客上找到.

(这应该是对最佳答案的评论,但我没有足够的代表)