首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使[DebuggerNonUserCode]在简单测试用例中对调试器隐藏异常?

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

Stack Overflow用户
提问于 2016-09-08 04:22:14
回答 1查看 3.2K关注 0票数 9

设置:

1) MSVS 2015,选项-> Debugger -> "Just My Code“被选中。

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

代码语言:javascript
运行
复制
    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(主机、端口)。假设程序在启动时总是测试一些连接,调试器不应该每次都停止在这段代码上。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 00:05:37

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

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

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

代码语言:javascript
运行
复制
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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39382551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档