You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试时无法定位异常代码行?生成.pdb文件仍未解决

解决.NET调试中无法直接定位异常代码行的问题

先看一下你提到的代码:

public class Program { 
    public static void Main(string[] args) { 
        try { 
            DoWork(); //<- This method will throw exception 
        } catch(Exception ex) { 
            Console.WriteLine(ex.ToString()); 
        } 
    } 
}

你遇到的这个调试痛点我太懂了——有try/catch的时候直接跳catch,没try/catch就进中断模式,明明开了Full Debug信息也生成了pdb,就是没法直接跳到异常行看变量。别着急,给你几个便捷的解决办法:

  • 开启“异常抛出时立即中断”
    按Ctrl+Alt+E打开Visual Studio的「异常设置」窗口,找到你关注的异常类型(比如最通用的Exception),勾选「抛出时」的复选框。这样不管代码里有没有try/catch,只要异常一被抛出,调试器会立刻停在抛出异常的那一行,直接就能查看上下文变量,不用再去catch里翻堆栈。

  • 检查“仅我的代码”设置
    有时候「仅我的代码」会屏蔽掉非你编写的代码调试,导致异常位置被跳过。你可以去「工具 -> 选项 -> 调试 -> 常规」里,取消勾选「启用仅我的代码」(如果之前是勾选状态的话)。这样调试器能追踪到所有代码的执行,确保不会漏掉异常发生的位置。

  • 确认pdb文件正确加载
    虽然你已经生成了pdb,但可以验证下调试时是否真的加载成功:调试过程中按Ctrl+Alt+U打开「模块」窗口,找到你的程序集,查看「符号状态」是不是显示「已加载」。如果没加载,右键点击程序集选择「加载符号」,手动指定pdb文件的路径就能解决。

  • 重新抛出异常用throw;而非throw ex;
    要是你有在catch里重新抛出异常的需求,千万不要用throw ex;——它会重置堆栈跟踪,丢失原始异常的位置信息。改用throw;就能保留完整的堆栈调用链,调试器能准确找到最初抛出异常的代码行。

内容的提问来源于stack exchange,提问作者Charanoglu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:51:56