只有异常堆栈跟踪的最后一行出现

问题描述:

我在收集有关在我的代码中生成(很少)未处理的异常的信息时遇到了一些问题。我已经建立了一个非常标准的处理程序。只有异常堆栈跟踪的最后一行出现

在主,我有:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionProcessor); 

而且处理函数是:

public void ExceptionProcessor(object sender, UnhandledExceptionEventArgs e) 
{ 
    Log(((Exception)e.ExceptionObject).StackTrace); 
} 

但所有我曾经得到的是一条线(并不总是相同的一个)。谷歌搜索显示,这些行深入.Net框架库,并且意味着是堆栈跟踪的最后一行。所以,关于我的代码的所有实际有用的信息都丢失了。有谁知道什么可能导致这种行为?

我最近得到的这条线说它不能将System.Threading.AutoResetEvent强制转换为System.Threading._ThreadPoolWaitOrTimerCallback。

谢谢。

+3

我可能问的很明显,但是有没有InnerException? – 2010-10-27 13:05:25

+0

你正在编译为Debug或Release模式吗?编译器可能会内联你的一些函数。您的堆栈跟踪中也会丢失行号。 – 2010-10-27 13:06:03

+0

@Dave我在发布时丢失了行数,但是当我捕获正常的异常时,我不会丢失任何堆栈跟踪,这种行为对于UnhandledException情况是唯一的。 – United 2010-10-27 13:12:08

这很奇怪。 e.ExceptionObject的类型是什么?这是一个自定义异常吗?

我敢打赌,有一些发生的情况下您的实际利益异常被抓,然后某处重新抛出...

+0

该类型是InvalidCastException(默认.Net之一)。而且我也有同样的想法重新抛出:)我已经测试了它,并且在创建新的堆栈顶端(在我的代码级别)重新抛出了较低的层次。我所看到的是相反的,只有最深层次的保存。 – United 2010-10-27 13:22:05

我有时用e.tostring()写全异常详细信息进入登录。试试吧..

你记录内部异常吗?每个例外都有InnerException属性可能包含另一个异常。