在AppDomain.UnhandledException处理程序中获取异常对象

时间:2015-10-07 04:28:31

标签: c# .net event-handling unhandled-exception

当我的应用程序因未处理的异常而崩溃时,我正在使用AppDomain.UnhandledException事件处理程序执行一些日志记录。

void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {...}

当未处理的异常的来源是我的自定义对象类之一时,我希望能够记录typeof(object)和各种object字段/属性,但似乎这些信息不是包含在UnhandledExceptionEventArgssender对象中。我尝试了sender,但可以理解的是,sender只是引发异常的AppDomain

有没有办法从 这个事件处理程序中检索此信息?我能想到的唯一另一件事是每次对象抛出时都使用静态字段来存储对象的引用,但我认为这需要我为每个类型设置一个静态字段。< / p>

注意:我知道stack trace可能会将我引向异常的来源,但是这不允许我在崩溃期间记录有关该对象的重要状态信息。

例如,如果e.ExceptionObject的堆栈跟踪是

Stack Trace: 
   at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
   at CustomLibrary.CustomObject.readCallback(IAsyncResult ar)
   at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
   ...

我希望能够获得NetworkStream对象的引用,这将允许我在集合中找到关联的CustomObject

1 个答案:

答案 0 :(得分:0)

尝试使用下面的代码,看看异常是否被捕获。还要检查代码中的任何位置是否正在重新抛出异常,例如ULElement。如果是,它会占用您正在寻找的堆栈跟踪,请尝试使用throw ex重新抛出。

throw

希望这有帮助!

相关问题