关于在调试模式和发布模式下的堆栈跟踪深度,我得出了以下结论(通过调用exception.ToString()):
在调试模式下,您可以获得包含行号的完整堆栈跟踪(多个帧)。 而在发布模式下,您只能获得包含行号的try块中抛出方法的堆栈跟踪(单个帧)。
- 这是真的吗? - 有没有办法在发布模式下获取完整的堆栈跟踪?
你好,
我想记录异常详细信息 日志应该包括所有堆栈跟踪(链中的所有方法) 日志应包括每个方法在堆栈跟踪中的行号。
我在调试和发布模式下尝试了两种方法。 我不喜欢结果:
在调试模式下,两者都返回带有行号的完整堆栈跟踪:-) 在发布模式下,两者都仅返回catch方法的详细信息。人们无法真正知道try块中哪个调用失败了
请问有人能解释一下吗? 还有,当从捕获块中的其他方法引用异常时,异常的堆栈跟踪信息是否会丢失?
谢谢
选项1: exception.ToString- 选项2:相同的结果(见下文)
在调试模式下,您可以获得包含行号的完整堆栈跟踪(多个帧)。 而在发布模式下,您只能获得包含行号的try块中抛出方法的堆栈跟踪(单个帧)。
- 这是真的吗? - 有没有办法在发布模式下获取完整的堆栈跟踪?
你好,
我想记录异常详细信息 日志应该包括所有堆栈跟踪(链中的所有方法) 日志应包括每个方法在堆栈跟踪中的行号。
我在调试和发布模式下尝试了两种方法。 我不喜欢结果:
在调试模式下,两者都返回带有行号的完整堆栈跟踪:-) 在发布模式下,两者都仅返回catch方法的详细信息。人们无法真正知道try块中哪个调用失败了
请问有人能解释一下吗? 还有,当从捕获块中的其他方法引用异常时,异常的堆栈跟踪信息是否会丢失?
谢谢
选项1: exception.ToString- 选项2:相同的结果(见下文)
calling static method receving the exception as parameter
System.Diagnostics.StackTrace exceptionStackTrace =
new System.Diagnostics.StackTrace(e, true);
System.Diagnostics.StackFrame [] exceptionStackFrames =
exceptionStackTrace.GetFrames();
foreach (System.Diagnostics.StackFrame stackFrame in exceptionStackFrames)
{
message += String.Format("at {0} {1} line {2} column {3} \n",
stackFrame.GetFileName() == null ? string.Empty : stackFrame.GetFileName(),
stackFrame.GetMethod().ToString(),
stackFrame.GetFileLineNumber(),
stackFrame.GetFileColumnNumber());
}