首页 文章

唐't stop debugger at THAT exception when it'被抛出并 grab 了

提问于
浏览
86

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

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

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

5 回答

  • 61

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

  • 38

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

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

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

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

  • 3

    默认情况下,在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上找到 .

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

  • 12

    您无法挑出代码中特定位置抛出的异常 . 但是,您可以禁用特定类型的exeptions .

    如果你自己的代码抛出了有问题的异常,我会把它作为一个自定义异常,从任何拟合派生,然后在这个派生类型上禁用debug break .

    禁用系统exeptions作为NullReferenceException将影响整个系统,这当然在开发期间是不可取的 .

    请注意,异常有两种中断行为:

    • Thrown:如果选中,则抛出此类型的异常后立即中断

    • User-unhandled:如果选中,则仅当try / catch未处理此类型的异常时才会中断 .

    您可以删除NullReferenceException中的'Thrown'中的检查,这将使您在每次系统通过代码中的行时都不会中断,但如果您在其他部分中发生了一些未处理的NullReference预测,则仍然会中断 . 系统 .

  • 14

    DebuggerHidden是你的朋友!

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

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

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

    请注意,这两个选项目前不适用于iterator block methodsasync/await methods . 这可以在Visual Studio的更新版本中修复 .

相关问题