拦截C#中的所有异常,即使它们已被捕获

时间:2014-08-29 16:04:48

标签: c# .net multithreading exception

Visual Studio能够打破所有异常,即使它们被捕获。请注意CLR异常的“Thrown”下的复选框。检查完毕后,即使调用堆栈中某处有throw,调试器也会在每个catch语句中断开。

Exception handling in Visual Studio

有没有办法在代码中执行此操作?我在64位类库中使用.NET 4.5.1。我的目标是记录每个异常及其堆栈跟踪。这样,当我在没有Visual Studio的计算机上测试我的程序时,我会得到抛出异常的日志,甚至是我通过向用户显示对话框来处理的异常。我的程序是多线程的,因此它需要在任何线程中引发抛出异常的事件。

一种可怕的方法是只扩展Exception,在新类的构造函数中放入一些代码,并确保每个异常都扩展它。但是,这是不可行的,因为抛出的许多异常甚至不是我的代码而是CLR本身。

那么,关于如何引发或监听在抛出异常时引发的事件的想法,即使捕获到该异常也是如此?我所见过的是各种捕捉未捕获异常的方法,这不是我想要的。

1 个答案:

答案 0 :(得分:11)

您可以使用AppDomain.FirstChanceException活动。

AppDomain.Current.FirstChanceException += (sender, eventArgs) =>
{
    Logger.Log(eventArgs.ToString());
}