C# 已处理异常的日志记录

C# 已处理异常的日志记录,c#,exception-handling,C#,Exception Handling,我正在开发一个WPF.NET3.5应用程序,该应用程序正在使用公司内创建的其他模块/库。并不是所有的异常都支持日志记录,有时关于已处理异常的信息对于找出错误非常有用。 所以问题是,我是否可以在其他模块中以某种方式获得已处理事件的通知或连接 谢谢。有两个事件,Application.dispatchernhandledexception和AppDomain.CurrentDomain.UnhandledException,它们可能会对您有所帮助。否则,我认为,你就不走运了,特别是如果模块自己处理异

我正在开发一个WPF.NET3.5应用程序,该应用程序正在使用公司内创建的其他模块/库。并不是所有的异常都支持日志记录,有时关于已处理异常的信息对于找出错误非常有用。 所以问题是,我是否可以在其他模块中以某种方式获得已处理事件的通知或连接


谢谢。

有两个事件,
Application.dispatchernhandledexception
AppDomain.CurrentDomain.UnhandledException
,它们可能会对您有所帮助。否则,我认为,你就不走运了,特别是如果模块自己处理异常的话。唯一的方法是附加一个调试器,因为第一次出现异常。

在Net4.0及更高版本中,有一个解决方案:
该事件在执行任何catch块之前激发

这有一些例子

基本上,您只需添加如下事件处理程序:

    AppDomain.CurrentDomain.FirstChanceException += 
        (object source, FirstChanceExceptionEventArgs e) =>
        {
            Console.WriteLine("FirstChanceException event raised in {0}: {1}",
                AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
        };

我的代码可以捕获并记录未处理的数据。问题其实是关于处理的异常除了调试器之外,你运气不好。另请参见,这不像挂起事件那么容易,但有一些方法可以捕获它们。不幸的是,它需要一些相当低级的黑客,可能会影响性能。请看这里:这些问题让我想知道,是否会有人需要一种工具,它可以ildasm一个程序集,列出异常被吞没的所有位置,并提供一个自动重写器来注入对日志代码的调用(或者甚至为了调试的目的而强制重新调用异常)。有点像AOP系统,但设计用于与未注释的DLL一起工作,作为处理行为不端的第三方代码的一种方式。该工具将非常有用,至少对于调试目的是如此。