C# 只显示异常堆栈跟踪的最后一行

C# 只显示异常堆栈跟踪的最后一行,c#,exception,.net-2.0,unhandled-exception,C#,Exception,.net 2.0,Unhandled Exception,我在收集代码中生成的(很少)未处理异常的信息时遇到了一些问题。我已经建立了一个处理程序几乎是标准的方式 总的来说,我有: AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionProcessor); 处理函数是: public void ExceptionProcessor(object sender, UnhandledExceptionEventArgs e) {

我在收集代码中生成的(很少)未处理异常的信息时遇到了一些问题。我已经建立了一个处理程序几乎是标准的方式

总的来说,我有:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionProcessor);
处理函数是:

public void ExceptionProcessor(object sender, UnhandledExceptionEventArgs e)
{
    Log(((Exception)e.ExceptionObject).StackTrace);
}
但我所得到的只是一行(并不总是同一行)。谷歌搜索显示,这些行位于.NETFramework库的深处,是堆栈跟踪的最后一行。因此,关于我的代码的所有实际有用的信息都丢失了。有人知道是什么导致了这种行为吗

我最近收到的一行消息说,它无法将System.Threading.AutoResetEvent强制转换为System.Threading.\u ThreadPoolWaitorTimeCallback


谢谢。

真奇怪。e.ExceptionObject的类型是什么?这是自定义的例外情况吗


我敢打赌,在某些情况下,您感兴趣的实际异常会被捕获,然后重新抛出到某个地方……

我有时会使用e.tostring()将整个异常详细信息写入日志。试试看..

是否记录内部异常?每个异常都有
InnerException
属性,该属性可能包含另一个异常。

我可能会问一个明显的问题,但是否存在InnerException?您是编译为调试模式还是发布模式?编译器可能正在内联一些函数。堆栈跟踪中也会丢失行号。@Dave我在发布时确实会丢失行号,但当我捕获到正常异常时,我不会丢失任何堆栈跟踪,这种行为是未处理异常情况所特有的。@Steve,如果是内部异常,那么深.Net异常不应该是内部异常吗?无论如何,我将进行修改,这仍然是一个很好的建议,通过内部异常递归收集所有堆栈跟踪。谢谢。你能发布你收到的实际异常和堆栈跟踪吗?类型是InvalidCastException(默认.Net one)。我对重新抛出也有同样的想法:)我已经测试过了,在创建新的栈顶(在我的代码级别)时,重新抛出会放松深层次。我看到的恰恰相反,只有最深的层次被保留下来。