将第三方工具与 dotMemory 集成
JetBrains .NET 工具(dotTrace、dotCover 和 dotMemory)基于通用的分析器核心。 该核心提供了低级分析功能,例如附加到被分析的进程,与 .NET Framework、.NET Core 或 .NET 运行时通信,收集分析数据等。
分析器核心提供了一种机制,使第三方工具能够与 JetBrains .NET 工具集成。 这种集成的一个示例是 Typemock Isolator 与 JetBrains dotTrace 一起运行:用户不仅可以测试其代码,还可以调查性能问题。
透明集成概念
当 JetBrains .NET 工具分析一个进程时,它会将分析器核心加载到被分析的进程中。 在透明集成的情况下,分析是由第三方工具启动的。 因此,第三方工具负责将分析器核心加载到被分析的进程中。
如何将您的工具与 dotMemory 集成
在开始分析之前,您的工具必须在以下至少一个位置提供其集成配置:
在 Linus 和 macOS 上:
文件
$HOME/.jetbrains-profiler-transparent-integration-config
在 Windows 上:
注册表
HKCU\SOFTWARE\JetBrains\Profiler\TransparentIntegration注册表
HKLM\SOFTWARE\JetBrains\Profiler\TransparentIntegration注册表
HKLM\SOFTWARE\WOW6432Node\JetBrains\Profiler\TransparentIntegration文件
%USERPROFILE%\.jetbrains-profiler-transparent-integration-config
配置文件包含键值对的列表。 每行只允许一个键值对。 键和值必须用
=分隔。 解析器会忽略行中#符号之后的任何文本。 空行会被忽略。键名
Windows 注册表数据类型
描述
{name}REG_SZ(必需)第三方分析器 COM 对象的类 ID。
{name}_Path32REG_SZ(Windows ARM64/x64/x86 上必需)x86 第三方分析器共享库的绝对路径。
{name}_Path64REG_SZ(Linux x64、macOS ARM64/x64、Windows ARM64/x64 上必需)x64 第三方分析器共享库的绝对路径。
{name}_PathArm32(Linux ARM 上必需)ARM 第三方分析器共享库的绝对路径。
{name}_PathArm64REG_SZ(Linux ARM64、macOS ARM64、Windows ARM64 上必需)ARM64 第三方分析器共享库的绝对路径。
{name}_RegistryFreeActivationREG_DWORD(可选,仅限 Windows)默认值为
0。 如果您打算跳过 步骤 2 ,即不分析 .NET Framework 2.0 - 4.5.2 进程,请指定除0以外的任何数字。如果您的工具启动了一个将被分析的进程,请为以下每个
{name}创建相应的注册表值:MemoryProfiler
如果您的工具附加到一个正在运行的将被分析的进程,请为以下每个
{name}创建相应的注册表值:MemoryProfiler_Attach
使用 Win32 API 或
regsvr32将您的工具注册为 COM 对象以支持 x86 和 x64(ARM64 CPU 不支持 .NET Framework 2.0 - 4.5.2)。要将 JetBrains 分析器核心加载到被分析的进程中,请使用以下数据:
变量
Windows 注册表数据类型
描述
JETBRAINS_PROFILER_CORE_GUIDREG_SZ(必需)分析器核心 GUID。
JETBRAINS_PROFILER_CORE_PATH32REG_SZ(Windows ARM64/x64/x86 上必需)x86 分析器核心共享库的绝对路径。
JETBRAINS_PROFILER_CORE_PATH64REG_SZ(Linux x64、macOS ARM64/x64、Windows ARM64/x64 上必需)x64 分析器核心共享库的绝对路径。
JETBRAINS_PROFILER_CORE_PATH_ARM32REG_SZ(Linux ARM 上必需)ARM 分析器核心共享库的绝对路径。
JETBRAINS_PROFILER_CORE_PATH_ARM64REG_SZ(Linux ARM64、macOS ARM64、Windows ARM64 上必需)ARM64 分析器核心共享库的绝对路径。
您必须从以下来源获取这些变量的值(按照指定顺序精确搜索来源,直到找到所需值):
在 Linus 和 macOS 上:
文件:
/tmp/Upid_<pid>_<pst>/<var>环境变量
在 Windows 上:
注册表:
HKCU\SOFTWARE\JetBrains\Profiler\Upid_<pid>_<pst>注册表:
HKLM\SOFTWARE\JetBrains\Profiler\Upid_<pid>_<pst>环境变量
注册表:
HKLM\SOFTWARE\JetBrains\Profiler\Global
Where:
<var>– 表中上述的 变量。<pid>– 一个无符号十进制进程 ID。<pst>– 一个十六进制进程启动时间:在 Linux 上:从系统启动以来的时钟周期数。
在 Windows 和 macOS 上:自 1601 年 1 月 1 日(UTC)以来的 100 纳秒间隔。
确保您的工具实现并保持
ICorProfilerInfo*接口的翻译为最新。 请注意,您的工具中ICorProfilerInfo::QueryInterface()的实现必须返回与其支持的 CLR/CoreCLR 版本相同的一组可用接口。 例如,如果 CoreCLR 仅支持ICorProfilerInfo–ICorProfilerInfo4,那么 JetBrains 分析器核心只能使用这些接口。