防止 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 时发生不安全的中止,所有线程都被允许运行