如何在.NET Core 2.1应用中获取异常的完整堆栈跟踪
如何在.NET Core 2.1中获取包含行号的完整异常堆栈跟踪
我完全懂你的困扰——VS文本可视化工具里能看到带行号和文件路径的完整堆栈信息,但把它存入变量后却丢失了这些关键细节,这主要是调试符号文件配置和异常信息获取方式的问题,下面给你一步步解决:
1. 确保项目生成调试符号文件(.pdb)
行号、文件路径这类调试信息是存储在.pdb文件里的,不管你是Debug还是Release模式,都需要让项目生成这个文件:
- 右键你的项目 → 属性 → 「生成」选项卡 → 点击右下角的「高级」按钮
- 在弹出的窗口中,把「调试信息」设置为「完整」或者「pdb-only」
- 保存配置后重新编译项目
2. 使用Exception.ToString()获取完整异常信息
别直接用Exception.StackTrace属性,它只返回调用栈的基础内容;而ToString()方法会返回全量异常详情——包括异常类型、错误消息、完整堆栈(含行号和文件路径),只要.pdb文件存在就能正确解析出这些信息。
示例代码:
try { // 你的业务代码,比如触发格式异常的Int32.Parse("非数字字符串") } catch (Exception ex) { // 这里的fullExceptionDetails会包含VS可视化工具里的所有细节 string fullExceptionDetails = ex.ToString(); // 后续将这个变量存入日志或其他存储介质 }
3. 发布时确保符号文件被部署
如果你的应用是发布到服务器运行,一定要把.pdb文件和程序集一起部署:
- 在发布配置的「文件发布选项」里,勾选「包含调试符号」
- 或者手动将生成的
.pdb文件复制到发布目录中
为什么VS可视化工具能看到完整信息?
VS在调试时会自动加载本地生成的.pdb文件,所以能解析出行号和文件路径;而你之前只取StackTrace属性,再加上如果项目没生成.pdb或者发布时没带上,自然就丢失了这些关键信息。
按上面的方法调整后,你存入变量的异常信息就会和VS可视化工具里的内容完全一致啦!
内容的提问来源于stack exchange,提问作者Mehaboob
相关产品推荐
相关产品推荐

