拦截C#中的所有异常,即使它们';你已经被抓住了

拦截C#中的所有异常,即使它们';你已经被抓住了,c#,.net,multithreading,exception,C#,.net,Multithreading,Exception,VisualStudio能够破解所有异常,即使它们被捕获。注意CLR异常的“抛出”下的复选框。选中后,调试器会在每个throw语句上中断,即使调用堆栈中的某个地方有catch 在代码中也有这样做的方法吗?我正在64位类库中使用.NET4.5.1。我的目标是记录每个异常及其堆栈跟踪。这样,当我在没有VisualStudio的计算机上测试我的程序时,我会得到抛出异常的日志,甚至是那些我通过向用户显示对话框来处理的异常。我的程序是多线程的,所以它也需要在任何线程中引发异常事件 一种可怕的方法是只扩展

VisualStudio能够破解所有异常,即使它们被捕获。注意CLR异常的“抛出”下的复选框。选中后,调试器会在每个
throw
语句上中断,即使调用堆栈中的某个地方有
catch

在代码中也有这样做的方法吗?我正在64位类库中使用.NET4.5.1。我的目标是记录每个异常及其堆栈跟踪。这样,当我在没有VisualStudio的计算机上测试我的程序时,我会得到抛出异常的日志,甚至是那些我通过向用户显示对话框来处理的异常。我的程序是多线程的,所以它也需要在任何线程中引发异常事件

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

那么,关于如何引发或侦听在抛出异常时引发的事件(即使捕获到该异常)的想法呢?我所看到的只是捕获未捕获异常的各种方法,这不是我想要的。

您可以使用事件

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