Visual Studio 2015调试器因DebuggerHidden函数的处理异常而停止

时间:2017-01-31 18:24:08

标签: c# visual-studio-2015 visual-studio-debugging

我希望调试器在以下时间停止:

  • 发生处理或未处理的异常。
  • 在具有DebuggerStepThrough或DebuggerHidden属性的函数中发生未处理的异常。调试器应该停止调用此函数的位置。

到目前为止没有问题,我能够让Visual Studio 2015像这样工作。但是,当在具有 DebuggerStepThrough DebuggerHidden 属性的函数内发生处理异常时,调试器将停止调用此函数的位置。

我找不到办法解决这个问题。我不记得在Visual Studio 2010或2013上的这种行为。我搜索过它,并没有找到任何人询问同样的问题。

编辑: 我试过 DebuggerNonUserCode ,结果是一样的。它说“抛出异常”。不,不是的! enter image description here

我的设置: enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用DebuggerNonUserCode属性而不是VS2015中的DebuggerStepThrough或DebuggerHidden属性,因为它们之间存在一些小差异:

https://blogs.msdn.microsoft.com/visualstudioalm/2016/02/12/using-the-debuggernonusercode-attribute-in-visual-studio-2015/

更新

我和你的VS2015有同样的问题。我发现它与调试选项有关,请启用TOOLS-> Options-> Debugging下的“Use Managed Compatibility Mode”选项。再次调试。

enter image description here

答案 1 :(得分:1)

MSDN文章Using the DebuggerNonUserCode Attribute in Visual Studio 2015解释了DebuggerNonUserCode所做的为什么它不会忽略异常。

这是由VS 2015的性能提升引起的

  

当启用Just My Code时,调试器不会再收到在“您的代码”之外抛出和处理的异常的通知。

这可以带来很大的性能提升,因为:

  

调试性能得到改善,因为启用“仅我的代码”时,调试器不会再收到在“您的代码”之外抛出和处理的异常的通知。

可以通过Update 2引入的注册表项关闭此行为:

  

要启用此功能,请从命令行运行以下命令,该命令将为您调整注册表:

reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1

您必须尝试并查看更重要的内容,忽略异常或更好的调试器性能。