调试时错误指向SqlMapper.cs而非业务代码行,无法定位问题
调试时异常指向SqlMapper.cs而非自定义代码的解决办法
1. 保留完整异常堆栈
- 捕获异常时不要截断堆栈信息,避免仅抛出
ex.Message。直接抛出原异常或保留完整异常对象:try { /* 你的数据库操作代码 */ } catch (Exception ex) { throw; } // 不修改原异常,保留完整调用链 - 全局异常处理逻辑中,确保输出
ex.ToString()而非仅异常信息,这样能看到完整的调用堆栈。
2. 确认调试符号加载正常
- 在Visual Studio的「模块」窗口(调试 → 窗口 → 模块)中,找到你的项目程序集,检查「符号状态」是否为「已加载」。未加载则右键选择「加载符号」。
- 项目生成配置切换为
Debug模式(Release模式默认会优化代码,丢失调试行号信息),同时在项目属性→生成→高级中,将「调试信息」设置为「完整」。
3. 封装数据库调用逻辑
- 将所有调用SqlMapper的数据库操作(如
Query、Execute)封装到独立的业务方法中,这样异常堆栈会包含你的业务方法调用行,快速定位问题:public User GetUser(int userId) { using(var conn = new SqlConnection(_connString)) { return conn.QueryFirstOrDefault<User>("SELECT * FROM Users WHERE Id = @Id", new { Id = userId }); } }
4. 关闭代码优化(按需)
- 如果需要在Release模式下调试,关闭项目属性→生成中的「优化代码」选项,优化会导致代码行号与实际执行逻辑不匹配,进而丢失调试定位信息。
5. 直接断点排查
- 若堆栈信息仍不明确,在所有调用SqlMapper的业务代码行上设置断点,逐步执行找到触发异常的具体调用位置。
内容的提问来源于stack exchange,提问作者user21952045
相关产品推荐
相关产品推荐

