异常堆栈跟踪

时间:2011-01-22 12:44:00

标签: c#

关于调试和释放模式下的堆栈跟踪深度。 我得出以下结论(调用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());  
        }

1 个答案:

答案 0 :(得分:1)

调试版本包含的信息比发布版本要多得多,以协助调试,包括行号等。

此信息存在于pdb文件中 - 如果您未在已发布的应用程序中包含这些信息,则无法在堆栈跟踪中获取行号。

按照this上的说明回答以在版本构建中启用行号。