加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使[DebuggerNonUserCode]在简单的测试用例中隐藏调试

发布时间:2020-12-15 08:13:46 所属栏目:百科 来源:网络整理
导读:建立: 1)MSVS 2015,选项 – 调试器 – 检查“只是我的代码”. 2)此示例代码放在某个类中并在启动期间调用: static bool TestIgnoreException() { Exception ex; return TrySomething(out ex); } [DebuggerNonUserCode] // Prevent exceptions from stoppin
建立:

1)MSVS 2015,选项 – >调试器 – >检查“只是我的代码”.

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

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(主机,端口).假设一个程序总是在启动期间测试一些连接,调试器不应该每次都停在这个特定的代码段上.

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

解决方法

谜团已揭开.由于增加了异常处理优化,这确实是MSVS 2015中的一个新问题.

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

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

reg add HKCUSoftwareMicrosoftVisualStudio14.0_ConfigDebuggerEngine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1

相关问题:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读