防止 Visual Studio 调试因明显的“未处理异常”而中断

Posted

技术标签:

【中文标题】防止 Visual Studio 调试因明显的“未处理异常”而中断【英文标题】:Prevent Visual Studio debugging breaking on an apparent "unhandled exception" 【发布时间】:2011-12-02 20:40:54 【问题描述】:

请考虑这个简短的控制台应用程序代码。

static void Main(string[] args)

    try
    
        Action a = () =>
        
            throw new ApplicationException("Oops");
        ;

        var ar = a.BeginInvoke(null, null);
        ar.AsyncWaitHandle.WaitOne();
        try
        
            a.EndInvoke(ar);
            Console.WriteLine("No message");
        
        catch (Exception e)
        
            Console.WriteLine(e.Message);
        
    
    finally
    
        Console.ReadKey();
    

当运行 Visual Studio 时,throw 会中断并抱怨它未处理。在调试器之外执行时,代码会按照我的预期执行(显示“糟糕”)。

如何说服 Visual Studio 允许代码像在现实世界中一样执行?

【问题讨论】:

如果 lambda 是一种方法,您可以应用 DebuggerNonUserCode attribute 来达到预期的效果。 @dtb:这很值得放在答案中,但我希望看到一个允许我保留 lambda 的替代方案。 只是观察:Visual Studio 在调用 ar.AsyncWaitHandle.WaitOne() 时会抱怨,而不是在尝试中的 a.EndInvoke(ar) 时抱怨。 @alpha-mouse:这不是我使用这个确切代码所遇到的情况。 Visual Studio 在throw 行停止。 我没有,也从未见过它这样做,并且已经练习了很多次。调试器在第一次机会异常通知时停止是唯一的解释。您在“输出”窗口中实际看到了什么? 【参考方案1】:

您可以将DebuggerNonUserCode attribute 应用到某个方法以将其对调试器隐藏。

【讨论】:

如何将这样的属性放在匿名委托上?

以上是关于防止 Visual Studio 调试因明显的“未处理异常”而中断的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Visual Studio 在调试时启动 WcfSvcHost.exe?

Visual Studio 2017 调试错误:为了防止在评估函数 *.toString 时发生不安全的中止,所有线程都被允许运行

未找到 qsort.cpp(在 Visual Studio 中调试)

C# Visual Studio 2010 未开始调试

Visual Studio 远程调试中未命中断点

Visual Studio 调试器可以显示未引用/未转义的字符串吗?