StackTrace类方法无法在发布模式下工作

时间:2014-10-10 04:37:45

标签: c# debugging stack-trace

下面是我用于记录错误详细信息的代码。

StackTrace sTrace = new StackTrace(true);
string functionname = Environment.NewLine + " MethodName - " + sTrace.GetFrame(1).GetMethod().Name;
string classname = Environment.NewLine + " File Path - " + sTrace.GetFrame(1).GetFileName() + Environment.NewLine + " Line No. - " + sTrace.GetFrame(1).GetFileLineNumber() + Environment.NewLine + " ClassName - " + sTrace.GetFrame(1).GetMethod().ReflectedType.Name + Environment.NewLine + " DateTime - " + DateTime.Now.ToString();
WriteLine(string.Concat("ERROR: ", errMsg, classname, functionname,
                                 Environment.NewLine));

这在调试模式下工作得很好,但在相关模式下,我将函数名和类名称视为空白,行号(sTrace.GetFrame(1).GetFileLineNumber())为0。

是否有其他最佳方法可以获取发生错误的函数名,类名和行号。

提前感谢。

3 个答案:

答案 0 :(得分:1)

使用Debug构建配置,

StackTrace信息将提供最多信息。默认情况下,Debug构建包括调试符号,而Release构建则不包括。调试符号包含构造StackFrame和StackTrace对象时使用的大部分文件,方法名称,行号和列信息。

实际上,发布模式可以优化代码并且没有Program DataBase file(.pdb)

在发布模式

属性 - >构建 - >定义调试常量(检查)

属性 - >构建 - >优化代码(取消检查)

答案 1 :(得分:1)

如果您在应用程序中使用.pdb文件,则可以获取它。请检查this

您可以启用它:Properties > Linker > Debugging > Generate Debug Info = "Yes"

关于pdb files

的说明

答案 2 :(得分:1)

以下是屏幕截图 - http://imgur.com/Oet3SED

属性 - >构建 - >释放conf - > Adv->调试infor(FULL)。