【问题标题】:Prevent Visual Studio debugging breaking on an apparent "unhandled exception"防止 Visual Studio 调试因明显的“未处理异常”而中断
【发布时间】: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 行停止。
  • 我没有,也从未见过它这样做,并且已经练习了很多次。调试器在第一次机会异常通知时停止是唯一的解释。您在“输出”窗口中实际看到了什么?

标签: c# multithreading exception-handling visual-studio-2012 visual-studio-debugging


【解决方案1】:

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

【讨论】:

  • 如何将这样的属性放在匿名委托上?
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2019-10-06
  • 2015-06-22
相关资源
最近更新 更多