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

use*_*413 4 .net c# multithreading exception

Visual Studio能够打破所有异常,即使它们被捕获.请注意CLR异常的"Thrown"下的复选框.检查时,throw即使catch调用堆栈中存在某个位置,调试器也会在每个语句上中断.

Visual Studio中的异常处理

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

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

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

Eug*_*kal 11

您可以使用AppDomain.FirstChanceException事件.

AppDomain.Current.FirstChanceException += (sender, eventArgs) =>
{
    Logger.Log(eventArgs.ToString());
}
Run Code Online (Sandbox Code Playgroud)