Visual Studio能够打破所有异常,即使它们被捕获。请注意CLR异常的“Thrown”下的复选框。检查完毕后,即使调用堆栈中某处有throw
,调试器也会在每个catch
语句中断开。
有没有办法在代码中执行此操作?我在64位类库中使用.NET 4.5.1。我的目标是记录每个异常及其堆栈跟踪。这样,当我在没有Visual Studio的计算机上测试我的程序时,我会得到抛出异常的日志,甚至是我通过向用户显示对话框来处理的异常。我的程序是多线程的,因此它需要在任何线程中引发抛出异常的事件。
一种可怕的方法是只扩展Exception
,在新类的构造函数中放入一些代码,并确保每个异常都扩展它。但是,这是不可行的,因为抛出的许多异常甚至不是我的代码而是CLR本身。
那么,关于如何引发或监听在抛出异常时引发的事件的想法,即使捕获到该异常也是如此?我所见过的是各种捕捉未捕获异常的方法,这不是我想要的。
答案 0 :(得分:11)
您可以使用AppDomain.FirstChanceException活动。
AppDomain.Current.FirstChanceException += (sender, eventArgs) =>
{
Logger.Log(eventArgs.ToString());
}