.NET 命令行动态探查器未捕获数据

.NET command line dynamic profiler not capturing data

提问人:Rooman 提问时间:11/14/2023 最后编辑:Rooman 更新时间:11/14/2023 访问量:26

问:

我正在将 .NET Framework 4.8 与 Visual Studio 2019 (v16.11.11) 一起使用。我正在尝试在从命令行上的包装脚本启动的 C# 可执行文件(和加载的 dll)上使用动态检测探查器。由于整个项目的要求,被检查的exe不能直接手动启动,也不能通过VS GUI启动;它必须由我们的组件启动器启动,才能在上游提供正确的响应。设置如下所示的环境变量,启动 vsperfcmd.exe 和 ProgramToInstrument 后.exe生成的 .vsp 文件的大小为 148 kb,并在打开时生成错误“文件包含在数据缓冲区上”。

根据 https://devblogs.microsoft.com/visualstudio/new-dynamic-instrumentation-profiling/#comment-24332 中包含的说明。我在 dynamicWrapper.bat 文件中有以下内容

set COR_ENABLE_PROFILING=1
set COR_PROFILER={324F817A-7420-4E6D-B3C1-143FBED6D855}
set CORECLR_ENABLE_PROFILING=1
set CORECLR_PROFILER={324F817A-7420-4E6D-B3C1-143FBED6D855}
set COR_PROFILER_PATH_32="C:\Program Files (x86)\Microsoft Visual set Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\InstrumentationEngine\x86\MicrosoftInstrumentationEngine_x86.dll"
set CORECLR_PROFILER_PATH_32="C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\InstrumentationEngine\x86\MicrosoftInstrumentationEngine_x86.dll"
set COR_PROFILER_PATH_64="C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\InstrumentationEngine\x64\MicrosoftInstrumentationEngine_x64.dll"
set CORECLR_PROFILER_PATH_64="C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\InstrumentationEngine\x64\MicrosoftInstrumentationEngine_x64.dll"
set MicrosoftInstrumentationEngine_ConfigPath32_PerfProfiler="C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\PerfProfiler.config"
set MicrosoftInstrumentationEngine_ConfigPath64_PerfProfiler="C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Platform\DiagnosticsHub\amd64\PerfProfiler.config"
set VSPERF_MODULES=ProgramToInstrument.exe; ModuleToInstrument.dll;
set VSPERF_EXCLUDE_SMALL_FUNCTIONS=1

call vsperfcmd.exe /start:trace /output:profileData.vsp
call ProgramToInstrument.exe
call vsperfcmd.exe /shutdown

如上所述,vsperfcmd.exe 正确启动,没有路径错误并创建 profileData.vsp。问题是 COR 探查器没有检测/连接到我的 exe 并生成检测数据。

我找不到任何关于使用动态检测的命令行的 Microsoft 文档。我知道并尝试了 https://learn.microsoft.com/en-us/visualstudio/profiling/instrument-dotnet-framework-component-and-collect-timing-data?view=vs-2019 中记录的旧静态预检测方法。这会产生众所周知的问题,即需要完整的 pdb 文件和破坏强签名。

C# .NET 分析 检测

评论

0赞 Ralf 11/14/2023
只是一个猜测。它仅适用于 .Net Core?不是旧的 Net Framework 的东西?
0赞 Ralf 11/14/2023
在链接的文章中,它有点提到“我们的动态检测支持没有 PDB 的 .NET Core 项目”。
0赞 Rooman 11/14/2023
@Ralf,根据 github.com/microsoft/CLRInstrumentationEngine/blob/main/docs/... 我的猜测是 COR_* 变量用于框架,CORECLR_* 变量用于 Core。定义两者至少意味着它适用于 .NET Framework。不过,这只是猜测工作,所以你很可能是对的,需要 .NET Core。

答: 暂无答案