建立:
1)MSVS 2015,选项 – >调试器 – >检查“只是我的代码”.
- static bool TestIgnoreException()
- {
- Exception ex;
- return TrySomething(out ex);
- }
- [DebuggerNonUserCode] // Prevent exceptions from stopping the debugger within this method.
- static bool TrySomething(out Exception exOut)
- {
- try
- {
- if (Environment. MachineName.Length != -1)
- throw new Exception("ThrewIt.");
- exOut = null;
- return true;
- }
- catch (Exception ex)
- {
- exOut = ex;
- return false;
- }
- }
3)启动调试器
预期的结果是TestIgnoreException()以静默方式运行并返回false.
实际结果是调试器在TestIgnoreException()中停止,即使在该范围内不应该处理异常.
4)也使用[DebuggerHidden]重新尝试,结果相同.
动机:
动机是针对某些不受您控制的API不提供“尝试”方法而仅通过使用异常指示失败的情况.
众多此类示例中的一个是.NET TcpClient.Connect(主机,端口).假设一个程序总是在启动期间测试一些连接,调试器不应该每次都停在这个特定的代码段上.
使用标准的“抛出时中断”异常复选框并不好,因为它按类型全局工作.它无法配置为在本地工作.检查代码的其他开发人员也应该自动跳过异常.