用于调试和分析的运行时配置选项
本文详细介绍可用于配置 .NET 调试和分析的设置。
注意
.NET 6 为用于配置 .NET 运行时行为的环境变量标准化前缀 DOTNET_
而不是 COMPlus_
。 但是,COMPlus_
前缀仍将继续正常工作。 如果使用的是早期版本的 .NET 运行时,则环境变量仍应该使用 COMPlus_
前缀。
启用诊断
- 配置是启用还是禁用调试器、探查器和 EventPipe 诊断。
- 如果省略此设置,则会启用诊断。 它等效于将值设置为
1
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | 不可用 | 不可用 |
环境变量 | COMPlus_EnableDiagnostics 或 DOTNET_EnableDiagnostics |
1 - 启用0 - 禁用 |
启用分析
- 配置是否为当前正在运行的进程启用分析。
- 如果省略此设置,则会禁用分析。 它等效于将值设置为
0
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | 不可用 | 不可用 |
环境变量 | CORECLR_ENABLE_PROFILING |
0 - 禁用1 - 启用 |
探查器 GUID
- 指定要加载到当前正在运行的进程中的探查器 GUID。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | 不可用 | 不可用 |
环境变量 | CORECLR_PROFILER |
string-guid |
探查器位置
- 指定要加载到当前正在运行的进程(或 32 位/64 位进程)的探查器 DLL 路径。
- 如果设置了多个变量,则优先使用指定位数的变量。 它们指定要加载的探查器的位数。
- 有关详细信息,请参阅 Finding the profiler library(查找探查器库)。
设置名 | 值 | |
---|---|---|
环境变量 | CORECLR_PROFILER_PATH |
string-path |
环境变量 | CORECLR_PROFILER_PATH_32 |
string-path |
环境变量 | CORECLR_PROFILER_PATH_64 |
string-path |
导出 perf 映射和 jit 转储
- 启用或禁用 perf 映射或 jit 转储的选择性启用。 这些文件允许第三方工具(如 Linux
perf
工具)标识动态生成的代码和预编译的 ReadyToRun (R2R) 模块的调用位置。 - 如果省略此设置,则会禁用写入 perf 映射和 jit 转储文件。 它等效于将值设置为
0
。 - 禁用 perf 映射时,并非所有托管的调用站点都将正确解析。
perf
工具支持这两种格式,具体取决于 Linux 内核版本。- 启用 perf 映射或 jit 转储会导致 10-20% 的开销。 为了最大程度地降低性能影响,建议有选择地启用 perf 映射或 jit 转储,但不要同时启用这两者。
下表比较了 perf 映射和 jit 映射。
格式 | 说明 | 支持平台 |
---|---|---|
perf 映射 | 发出 /tmp/perf-<pid>.map ,其中包含动态生成的代码的符号信息。发出 /tmp/perfinfo-<pid>.map ,其中包括 ReadyToRun (R2R) 模块符号信息,并由 PerfCollect 使用。 |
所有 Linux 内核版本都支持 perf 映射。 |
jit 转储 | jit 转储格式取代了 perf 映射,并包含更详细的符号信息。 启用后,jit 转储会输出到 /tmp/jit-<pid>.dump 文件。 |
Linux 内核版本 5.4 或更高。 |
设置名 | 值 | |
---|---|---|
runtimeconfig.json | 不可用 | 不可用 |
环境变量 | COMPlus_PerfMapEnabled 或 DOTNET_PerfMapEnabled |
0 - 禁用1 - 同时启用了 perf 映射和 jit 转储2 - 启用了 jit 转储3 - 启用了 perf 映射 |
性能日志标记
- 允许或禁止在性能日志中将指定信号作为标记予以接受和忽略。
- 如果省略此设置,则不会忽略指定的信号。 它等效于将值设置为
0
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | 不可用 | 不可用 |
环境变量 | COMPlus_PerfMapIgnoreSignal 或 DOTNET_PerfMapIgnoreSignal |
0 - 禁用1 - 启用 |
注意
如果省略 DOTNET_PerfMapEnabled 或将其设置为 0
(即禁用),则将忽略此设置。