我正在捕获异常并使用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 操作码).