:(需要 .NET 7 或更高版本)应写入诊断消息的文件路径 。如果未设置,则将诊断消息写入故障应用程序的控制台 。
对于这些环境变量,.NET 7 标准化前缀关于DOTNET_
,而不是COMPlus_
。但是,COMPlus_
前缀仍将继续正常工作 。如果使用的是早期版本的 .NET 运行时,则环境变量仍应该使用COMPlus_
前缀 。
DOTNET_DbgMiniDumpType
的说明如下所示:- 1:
Mini
小型Dump,其中包含模块列表、线程列表、异常信息和所有堆栈 。 - 2:
Heap
大型且相对全面的Dump,其中包含模块列表、线程列表、所有堆栈、异常信息、句柄信息和除映射图像以外的所有内存 。 - 3:
Triage
与Mini
相同,但会删除个人用户信息,如路径和密码 。 - 4:
Full
最大的转储,包含所有内存(包括模块映像) 。
DOTNET_DbgEnableMiniDump = 1DOTNET_DbgMiniDumpName = [有权限的Path目录]DOTNET_CreateDumpDiagnostics = 1DOTNET_EnableCrashReport = 1
试一试我们写一段代码来试一把,如下有一段代码首先输出了当前DTONET_
前缀对的环境变量,然后抛出一个异常 。using System.Collections;foreach (DictionaryEntry environmentVariable in Environment.GetEnvironmentVariables()){if(environmentVariable.Key.ToString()?.StartsWith("DOTNET_") == false) continue;Console.WriteLine($"{environmentVariable.Key}={environmentVariable.Value}");}throw new Exception("Crash");
然后编写一个run.bat
脚本,用于设置环境变量顺便启动我们的程序 。@SET DOTNET_DbgEnableMiniDump=1@SET DOTNET_DbgMiniDumpName="G:\Temp\CrashDump\CrashDump\bin\Debug\net6.0\dump.dmp"@SET DOTNET_CreateDumpDiagnostics=1@SET DOTNET_EnableCrashReport=1@CrashDump.exe
运行run.bat
可以看到环境变量正确的读到了,另外也成功的生成了Dump 。
文章插图
最后在对应的目录下,也生成了Dump文件 。

文章插图
如果是在容器环境中的话,直接修改Dockerfile即可,如下所示的那样:

文章插图
如果在容器环境中,
DOTNET_DbgMiniDumpName
需要配置映射到Host的目录,不然容器退出,Dump文件也会随之消失 。总结本文主要是介绍了如何在dotNet程序崩溃时自动创建Dump,Windows上的方法对于.NET Freamwork和.NET Core版本都适用 。.NET Core全平台版本的话需要注意环境变量支持的.NET版本 。
参考文献
- https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/aspnetcore/practice-troubleshoot-linux/lab-1-3-capture-core-crash-dumps
- https://www.meziantou.net/tip-automatically-create-a-crash-dump-file-on-error.htm
- https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/xplat-minidump-generation.md
经验总结扩展阅读
- 世贤品如是什么电视剧中的人物?
- 天玑2000最新消息_天玑2000曝光
- 网络不稳定老是掉线怎么办(网络不稳定如何解决)
- 怎么看主板型号(如何看电脑主板型号)
- 精子不足如何通过饮食来改善
- .NET Conf 2022 – 11 月 8 日至 10 日
- 社保如何查询交多久查看自己的社保缴纳方法看这里!
- 2023上海社保缴费证明如何查询 要怎么打印
- 三重拉尼娜事件是什么意思 三重拉尼娜事件是如何形成的
- 未来30天意外之财接连不断 桃花如虹好运不断的3大星座