如何使[DebuggerNonUserCode]在简单的测试用例中隐藏调试器的异常?

时间:2016-09-08 04:22:14

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

设定:

1)MSVS 2015,选项 - >调试器 - > “只是我的代码”已经过检查。

2)此示例代码放在某个类中并在启动期间调用:

Teacher: {{$data->name}}

3)启动调试器

预期结果是TestIgnoreException()以静默方式运行并返回false。

实际结果是调试器在TestIgnoreException()中停止,即使在该范围内不应该处理任何异常。

enter image description here

4)也使用[DebuggerHidden]重新尝试,结果相同。

动机:

动机适用于某些不受您控制的API不提供“Try”方法而只是通过使用异常来指示失败的情况。

众多此类示例中的一个是.NET TcpClient.Connect(主机,端口)。假设一个程序总是在启动期间测试一些连接,调试器不应该每次都停在这个特定的代码段上。

使用标准的“抛出时中断”异常复选框并不好,因为它按类型全局工作。它无法配置为在本地工作。检查代码的其他开发人员也应该自动跳过异常。

1 个答案:

答案 0 :(得分:8)

神秘解决了。由于添加了异常处理优化,它确实是MSVS 2015中的一个新问题。

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

在该链接上发布了一个解决方法,用于禁用优化并启用旧行为。希望他们最终能够恢复对此的支持,包括优化。

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

相关问题:

Don't stop debugger at THAT exception when it's thrown and caught