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

如何在C#单元测试中单步进入函数调试代码?

问题场景

为现有解决方案新增基于.NET Framework 4.5的C#单元测试时,出现调试异常:测试逻辑可正常执行,但无法单步进入同解决方案其他项目的方法内部,执行到CalculateChartLines方法调用行时调试器直接单步跳过。
已知信息:

  • 待调试代码属于同解决方案下的独立项目,单元测试项目已添加对应项目引用,而非直接引用GAC中的程序集
  • 待调试主项目的程序集已注册到GAC
  • 同解决方案下此前编写的单元测试均可正常单步调试

测试方法代码

[TestMethod]
public void CalculateChartlines_HasValidCL()
{
    // 初始化lvi、startDate、endDate参数
    ChartLines pchart = new ChartLines();
      
    CenterlineDateRange cdr = new CenterlineDateRange(0, true, startDate, endDate, 12);           

    var valuesOut = pchart.CalculateChartLines(ChartType.P_Chart, lvi, cdr); // 调试到此处直接跳过,无法进入方法内部
    ...
}

被调用类代码

public class ChartLines : ILNCharts
{
    public ChartLines()
    { 
    
    }
    public List<ValuesOut> CalculateChartLines(ChartType chartType, List<ValuesIn> lvi, CenterlineDateRange cldr)
    {
        return GetCalculateChartLines(chartType, lvi, cldr);
    }
    // 其余方法省略
}

public interface ILNCharts
{
    List<ValuesOut> CalculateChartLines(ChartType chartType, List<ValuesIn> lvi, CenterlineDateRange cldr);
    // 其余接口方法省略
}
排查解决步骤

按优先级从高到低操作即可:

  • 确认调试配置:检查解决方案及所有关联项目的激活配置为Debug而非Release,进入项目属性-生成页签,确认未勾选优化代码选项,Release模式的编译优化会直接导致断点不命中、单步跳过方法。
  • 解决GAC程序集优先级问题:这是该场景下最高发的原因。即使添加了项目引用,CLR加载程序集时会优先匹配GAC中同标识的程序集,如果GAC中的程序集版本和当前解决方案编译输出的版本一致,运行时会直接加载GAC内无对应调试符号的版本,导致无法单步。处理方式有两种:一是临时卸载GAC中注册的对应程序集,调试完成后再重新注册;二是修改被引用项目的程序集版本号,让运行时识别到版本差异,加载解决方案输出目录下带pdb调试符号的本地程序集。
  • 验证调试符号加载状态:调试运行状态下打开菜单栏调试-窗口-模块,在列表中找到被调用项目对应的dll文件,查看符号状态列,如果显示“符号未加载”,右键选择加载符号,手动指向该项目bin目录下生成的同名pdb文件即可。
  • 调整调试器设置:打开菜单栏工具-选项-调试-常规,取消勾选启用仅我的代码选项,避免调试器将外部程序集判定为非用户代码自动跳过。
  • 清理编译缓存:关闭Visual Studio后删除所有项目下的bin、obj文件夹,重新打开解决方案后执行“全部重新生成”,清除旧版本dll、pdb不匹配导致的调试异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:48:32