.NET Core集成测试性能分析问题:无法采集测试代码数据
解决.NET集成测试性能分析无法采集业务代码数据的问题
一、确保符号文件(PDB)正确生成
符号文件是性能分析工具识别业务代码的核心,必须保证测试和业务项目生成完整的PDB:
- 打开业务项目和测试项目的
.csproj文件,添加或修改以下配置:<PropertyGroup> <!-- Debug模式默认生成完整PDB,Release模式需显式指定 --> <DebugType>portable</DebugType> <DebugSymbols>true</DebugSymbols> <!-- Release模式下如果需要分析,可临时关闭优化避免调用栈丢失 --> <Optimize>false</Optimize> </PropertyGroup> - 用Debug模式重新构建整个解决方案:
dotnet clean && dotnet build Solution.sln -c Debug
二、调整dotnet-trace命令,追踪子进程
dotnet test会启动独立的测试宿主进程(testhost.exe),默认的dotnet-trace只会追踪父dotnet进程,需开启子进程追踪:
- 使用以下命令采集数据:
dotnet-trace collect --collector-option IncludeChildProcesses=true --providers Microsoft-DotNETCore-SampleProfiler -- dotnet test Solution.sln -c DebugIncludeChildProcesses=true:确保追踪测试宿主子进程Microsoft-DotNETCore-SampleProfiler:指定托管代码分析提供者,保证采集业务代码调用栈
三、JetBrains dotTrace的正确配置
方式1:通过dotTrace直接启动测试
- 打开dotTrace,选择Run Configuration → 添加** .NET Test**配置
- 指定解决方案路径(Solution.sln),选择Debug配置
- 点击Run with Profiling,dotTrace会自动追踪所有测试相关进程,包括业务代码所在进程
方式2:附加到测试宿主进程
- 先手动启动测试:
dotnet test Solution.sln -c Debug - 在dotTrace的Attach to Process界面,找到名为
testhost.exe(或testhost.x86.exe)的进程,附加到该进程开始分析 - 注意:不要附加到父
dotnet.exe进程,否则无法采集业务代码数据
四、额外排查点
- 确认测试项目是项目引用业务项目,而非引用NuGet包:如果用NuGet包,符号文件可能不匹配或缺失
- 避免使用
--no-build参数:确保每次分析前都重新构建,保证二进制和PDB文件一致
内容的提问来源于stack exchange,提问作者Karel Frajták
相关产品推荐
相关产品推荐

