关于调试和释放模式下的堆栈跟踪深度。 我得出以下结论(调用exception.ToString()):
在调试模式下,您将获得包含行号(几帧)的完整堆栈跟踪 在发布模式而不是完成堆栈跟踪时,您只能获得try块中的throw方法 (单帧)与行号
您好,
我想记录异常详细信息 日志应该包括所有堆栈跟踪(链中的所有方法) log shoud包括堆栈跟踪中每个方法的行号。
我一直在调试和发布模式下尝试两种方法。 我不喜欢结果:
调试模式下的都返回带有行号的完整堆栈跟踪:-) 在发布模式下,两者都只返回了catch方法的细节。一个人真的不能 知道try块中的哪个调用失败
任何人都可以解释一下吗? 另外,是引用异常时丢失的堆栈跟踪信息 来自catch块中调用的其他方法
感谢
选项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());
}
答案 0 :(得分:1)
调试版本包含的信息比发布版本要多得多,以协助调试,包括行号等。
此信息存在于pdb
文件中 - 如果您未在已发布的应用程序中包含这些信息,则无法在堆栈跟踪中获取行号。
按照this上的说明回答以在版本构建中启用行号。