ELMAH - ErrorSignal.Raise没有堆栈信息

时间:2011-04-05 09:40:53

标签: elmah

我正在捕获异常并使用ELMAH进行记录。

如果我没有捕获异常并让应用程序YSOD,则ELMAH记录完整的堆栈跟踪。但是,当我捕获并使用ErrorSignal.Raise(ex)时,我没有得到堆栈跟踪。

我也试着无济于事:

ErrorSignal.FromCurrentContext().Raise(new System.ApplicationException(exception.ToString(), exception));

Whassup?

2 个答案:

答案 0 :(得分:11)

您正在使用ErrorSignal.Raise,而您只是new了一个不为人知的例外情况。抛出异常时会填充堆栈跟踪,因此您的未知异常将不会有堆栈跟踪。另一方面,ELMAH将捕获你在这里包装的异常实例 - 如果你在调试器中查看它,它实际上将包含堆栈跟踪,这与包装异常不同。

而不是包装在System.ApplicationException中(顺便说一句,你最初应该inherited from,而现在是considered obsolete by the framework designers),你应该只提出你捕获的原始异常。

作为一个有趣的旁注:由于在抛出异常时填充了堆栈跟踪,所以:

catch (Exception ex) {
    throw ex;
}

会破坏原始堆栈跟踪,而

catch (Exception ex) {
    throw; 
}

不会(后一位将发出保留原始堆栈跟踪的CIL rethrow操作码。)

答案 1 :(得分:4)

这样做:

ErrorSignal.FromCurrentContext().Raise(
                new System.ApplicationException(
                    exception.Message + exception.StackTrace, exception));