如何获取包含文件路径和代码行号的当前方法调用跟踪?
获取带文件路径和行号的.NET调用栈信息
你现在的代码能输出基础调用栈,但缺少文件路径和行号,核心原因是默认的StackTrace构造函数不会主动捕获这些调试相关信息,只需调整两个关键点就能实现需求:
1. 确保调试符号(PDB文件)可用
首先要保证项目生成了PDB文件:
- Debug模式下,Visual Studio默认会自动生成PDB,和程序集放在同一目录
- Release模式下,需要手动开启:右键项目 → 属性 → 生成 → 高级 → 调试信息,选择「完整」或「pdb-only」
2. 修改StackTrace的初始化代码
把原来的无参构造改成带参数的重载,显式指定需要捕获文件信息:
static void Main() { A(); } static void A() { B(); } static void B() { C(); } static void C() { // 设置fNeedFileInfo为true,开启文件路径和行号的捕获 System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace(true); Console.WriteLine(t); }
修改后的输出效果
运行后就能得到你想要的带行号的调用栈:
at test.MyClass.C() in D:\Projects\TestApp\Program.cs:line 26 at test.MyClass.B() in D:\Projects\TestApp\Program.cs:line 22 at test.MyClass.A() in D:\Projects\TestApp\Program.cs:line 18 at test.MyClass.Main() in D:\Projects\TestApp\Program.cs:line 12
额外注意事项
- 发布应用时,要把PDB文件和程序集一起部署,否则还是无法获取行号信息
- .NET Core/.NET 5+项目的设置逻辑和.NET Framework一致,同样需要确保PDB生成并随程序发布
内容的提问来源于stack exchange,提问作者DaveG
相关产品推荐
相关产品推荐

