当一个应用程序运行的有问题时,生成一个 Dump 文件来调试它可能会很有用。在 Windows、Linux 或 Azure 上有许多方法可以生成转储文件。
Windows 平台
dotnet-dump (Windows)
dotnet-dump 全局工具[1]是一种收集和分析.NET 核心应用程序 Dump 的方法。
安装 dotnet-dump
(必须要 .NET SDK) 或者 直接下载[2]
dotnet tool install --global dotnet-dump
使用ps
命令找到进程 Id
dotnet-dump ps
通过指定的进程 id 创建 dump 文件
代码语言:javascript复制dotnet-dump collect --process-id <ProcessId>
Windows 任务管理器
- 按下
Ctrl Shift Esc
打开 Windows 任务管理器 - 选择"详细信息"选项卡
- 在列表中找到你的应用程序
- 右击它,然后选择 "创建转储文件"
SysInternals - Process Explorer
- 下载 Process Explorer: Process Explorer[3]
- 打开 Process Explorer
- 右击进程选择 "Create Dump" 项
]
SysInternals - ProcDump (Windows)
ProcDump
是一个命令行工具,当应用程序假死或进程使用太多的 CPU 时,可以生成一个 Dump 文件。
下载 ProcDump: ProcDump[4]
使用进程名或者进程 Id 创建 dump
代码语言:javascript复制procdump notepad
代码语言:javascript复制procdump 4572
调试诊断工具
调试诊断工具允许在满足某个条件时生成一个转储文件。例如,当应用程序崩溃或 CPU 使用率高时,它可以生成一个 Dump 文件。
- 下载 Debug Diagnostic Tool v2 Update 3[5]
- 点击 "DebugDiag 2 Collection" (在开始菜单中可用)
- 配置一个规则,比如说当应用程序崩溃的时候
- 当条件得到满足时,会在配置的文件夹中生成一个崩溃 Dump。
Visual Studio
如果你正在调试一个应用程序,你可以直接从 Visual Studio 保存一个转储文件。打开 "调试 "菜单,点击 "将转储另存为... "菜单项。
WinDbg
如果你正在使用 WinDbg 调试一个应用程序,你可以使用.dump
命令来生成一个转储文件。/ma
选项允许为所有连接的进程生成一个 minidump:
.dump /ma [path]
Windows Error Reporting
Windows 错误报告允许在应用程序崩溃时生成一个转储文件。你可以查看我以前关于它的帖子。出错时自动创建崩溃转储文件[6] "Tip: 在出错时自动创建一个崩溃转储文件"。
Linux
dotnet-dump (Linux)
dotnet-dump 全局工具[7]是一种收集和分析.NET 核心应用程序转储的方法。
安装 dotnet-dump
(必须 .NET SDK) 或者 下载它[8]
dotnet tool install -g dotnet-dump
使用下面的命令找到进程 Id
代码语言:javascript复制dotnet-dump ps
通过指定的进程 id 创建 dump 文件
代码语言:javascript复制dotnet-dump collect --type heap --process-id <ProcessId>
SysInternals - ProcDump (Linux)
ProcDump 是一个命令行工具,当应用程序冻结或使用太多的 CPU 时,可以生成一个 Dump 文件。
下载 ProcDump for Linux: ProcDump For Linux[9]
使用进程名或者进程 Id 创建 dump
代码语言:javascript复制procdump 4572
Azure App Services
Azure 允许我们为 App 服务生成和分析 Dump 文件。
- 选择你的应用程序服务
- 转到 "诊断和解决问题"
- 选择 "诊断工具"
- 选择 "收集内存转储"
- 点击 "收集内存转储 "按钮
- 几分钟后,转储在配置的存储账户中可用。
版权
原文版权:Meziantou
翻译版权:InCerry
原文链接: https://www.meziantou.net/how-to-generate-a-dump-file-of-a-dotnet-application.htm
参考资料
[1]
dotnet-dump全局工具: https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump?WT.mc_id=DT-MVP-5003978
[2]
直接下载: https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump?WT.mc_id=DT-MVP-5003978#install
[3]
Process Explorer: https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer?WT.mc_id=DT-MVP-5003978
[4]
ProcDump: https://learn.microsoft.com/en-us/sysinternals/downloads/procdump?WT.mc_id=DT-MVP-5003978
[5]
Debug Diagnostic Tool v2 Update 3: https://www.microsoft.com/en-us/download/details.aspx?id=58210
[6]
出错时自动创建崩溃转储文件: https://www.meziantou.net/tip-automatically-create-a-crash-dump-file-on-error.htm
[7]
dotnet-dump全局工具: https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump?WT.mc_id=DT-MVP-5003978
[8]
下载它: https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump?WT.mc_id=DT-MVP-5003978#install
[9]
ProcDump For Linux: https://github.com/microsoft/ProcDump-for-Linux/blob/master/INSTALL.md