在发生故障时收集转储
配置应用程序以在发生故障时收集转储,方法是设置特定的环境变量。 如果想要了解故障原因,这将很有帮助。 例如,在引发异常时捕获转储有助于通过在应用发生故障时检查应用状态来确定问题。
下表显示了可用于将应用程序配置为在发生故障时收集转储的环境变量。
环境变量 | 说明 | 默认值 |
---|---|---|
COMPlus_DbgEnableMiniDump 或 DOTNET_DbgEnableMiniDump |
如果设置为 1,则启用核心转储生成。 | 0 |
COMPlus_DbgMiniDumpType 或 DOTNET_DbgMiniDumpType |
要收集的转储类型。 有关详细信息,请参阅小型转储的类型。 | 2 (Heap ) |
COMPlus_DbgMiniDumpName 或 DOTNET_DbgMiniDumpName |
写入转储的文件路径。 确保运行 dotnet 进程的用户对指定目录具有写入权限。 | /tmp/coredump.<pid> |
COMPlus_CreateDumpDiagnostics 或 DOTNET_CreateDumpDiagnostics |
如果设置为 1,则启用转储进程的诊断日志记录。 | 0 |
COMPlus_EnableCrashReport 或 DOTNET_EnableCrashReport |
(需要 .NET 6 或更高版本;在 Windows 上不受支持。) 如果设为 1,运行时会生成 JSON 格式的故障报表,其中包括有关故障应用程序的线程和堆栈帧的信息。 故障报表名称是追加了 .crashreport.json 的转储路径或名称。 |
|
COMPlus_CreateDumpVerboseDiagnostics 或 DOTNET_CreateDumpVerboseDiagnostics |
(需要 .NET 7 或更高版本。) 如果设为 1,则启用转储进程的详细诊断日志记录。 |
0 |
COMPlus_CreateDumpLogToFile 或 DOTNET_CreateDumpLogToFile |
(需要 .NET 7 或更高版本。) 应写入诊断消息的文件路径。 |
如果未设置,则将诊断消息写入故障应用程序的控制台。 |
注意
对于这些环境变量,.NET 7 标准化前缀 DOTNET_
,而不是 COMPlus_
。 但是,COMPlus_
前缀仍将继续正常工作。 如果使用的是早期版本的 .NET 运行时,则环境变量仍应该使用 COMPlus_
前缀。
文件路径模板
从.NET 5 开始,DOTNET_DbgMiniDumpName
还可以包含将动态填充的格式设置模板说明符:
说明符 | 值 |
---|---|
%% | 单个 % 字符 |
%p | 转储进程的 PID |
%e | 进程可执行文件名 |
%h | gethostname() 返回的主机名 |
%t | 转储时间,以新纪元时间(即 1970-01-01 00:00:00 +0000 (UTC))起的秒数表示 |
小型转储的类型
下表显示了可用于 DOTNET_DbgMiniDumpType
的所有值。 例如,将 DOTNET_DbgMiniDumpType
设置为 1 意味着在发生故障时将收集 Mini
类型的转储。
值 | 名称 | 描述 |
---|---|---|
1 | Mini |
小型转储,其中包含模块列表、线程列表、异常信息和所有堆栈。 |
2 | Heap |
大型且相对全面的转储,其中包含模块列表、线程列表、所有堆栈、异常信息、句柄信息和除映射图像以外的所有内存。 |
3 | Triage |
与 Mini 相同,但会删除个人用户信息,如路径和密码。 |
4 | Full |
最大的转储,包含所有内存(包括模块映像)。 |
单一文件和本机 AOT 应用模型仅支持完整转储。