ELMAH - ErrorSignal.Raise没有堆栈信息

jen*_*ent 1 elmah

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

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

我也试着无济于事:

ErrorSignal.FromCurrentContext().Raise(new System.ApplicationException(exception.ToString(), exception));
Run Code Online (Sandbox Code Playgroud)

Whassup?

Ryt*_*mis 11

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

而不是包装在System.ApplicationException中(顺便说一下,你最初应该继承的方式,现在被框架设计者认为是过时的),你应该只提出你捕获的原始异常.

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

catch (Exception ex) {
    throw ex;
}
Run Code Online (Sandbox Code Playgroud)

将破坏原始的堆栈跟踪,而

catch (Exception ex) {
    throw; 
}
Run Code Online (Sandbox Code Playgroud)

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