c# - StackTrace 类方法在 Release模式下不起作用

标签 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));

这在 Debug模式下工作完美,但在 Release模式下,我得到的函数名称和类名称为空白,行号 (sTrace.GetFrame(1).GetFileLineNumber()) 为 0。

是否有任何其他最佳方法可以从错误源处获取函数名、类名和行号。

提前致谢。

最佳答案

StackTrace调试构建配置的信息将是最有用的。默认情况下,Debug 版本包含调试符号,而 Release 版本不包含。调试符号包含构造 StackFrame 和 StackTrace 对象时使用的大部分文件、方法名称、行号和列信息。

其实Release模式优化代码并没有Program DataBase file(.pdb)

处于 Release模式

属性 -> 构建 -> 定义调试常量(勾选)

属性 -> 构建 -> 优化代码(取消勾选)

关于c# - StackTrace 类方法在 Release模式下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292033/

相关文章:

iphone - 如何调试 viewDidDisappear 或 dealloc?

windows - 如何防止 WinDbg 附加到特定的子进程?

MySQL C pdb 文件

javascript - 在 JavaScript 中记录异常,捕获堆栈跟踪

c# - .net 3.5 匿名 foreach

c# foreach 循环写得不好

c# - 如何使用 Entity Framework 4 访问存储过程的 'Results'、 'Messages' 和 'Return Value'?

c# - 使用嵌套的 div 而不是表或流来渲染 RadioButtonList

c - 覆盖 glibc 崩溃

java - "Software caused connection abort: socket write error"的官方原因