异常堆栈跟踪

3
关于在调试模式和发布模式下的堆栈跟踪深度,我得出了以下结论(通过调用exception.ToString()):
在调试模式下,您可以获得包含行号的完整堆栈跟踪(多个帧)。 而在发布模式下,您只能获得包含行号的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());  
        }
1个回答

1
一个调试版本包含比发布版本更多的信息,以帮助调试,包括行号等内容。
这些信息存储在 pdb 文件中 - 如果您没有将它们包含在发布的应用程序中,则无法在堆栈跟踪中获取行号。
按照 this SO 答案上的说明启用发布版本中的行号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接