创建.NET程序Dump的几种姿势

2022-11-14 16:34:16 浏览数 (1)

当一个应用程序运行的有问题时,生成一个 Dump 文件来调试它可能会很有用。在 Windows、Linux 或 Azure 上有许多方法可以生成转储文件。

Windows 平台

dotnet-dump (Windows)

dotnet-dump 全局工具[1]是一种收集和分析.NET 核心应用程序 Dump 的方法。

安装 dotnet-dump (必须要 .NET SDK) 或者 直接下载[2]

代码语言:javascript复制
dotnet tool install --global dotnet-dump

使用ps命令找到进程 Id

代码语言:javascript复制
dotnet-dump ps

通过指定的进程 id 创建 dump 文件

代码语言:javascript复制
dotnet-dump collect --process-id <ProcessId>

Windows 任务管理器

  1. 按下 Ctrl Shift Esc 打开 Windows 任务管理器
  2. 选择"详细信息"选项卡
  3. 在列表中找到你的应用程序
  4. 右击它,然后选择 "创建转储文件"

SysInternals - Process Explorer

  1. 下载 Process Explorer: Process Explorer[3]
  2. 打开 Process Explorer
  3. 右击进程选择 "Create Dump" 项

]

SysInternals - ProcDump (Windows)

ProcDump是一个命令行工具,当应用程序假死或进程使用太多的 CPU 时,可以生成一个 Dump 文件。

下载 ProcDump: ProcDump[4]

使用进程名或者进程 Id 创建 dump

代码语言:javascript复制
procdump notepad
代码语言:javascript复制
procdump 4572

调试诊断工具

调试诊断工具允许在满足某个条件时生成一个转储文件。例如,当应用程序崩溃或 CPU 使用率高时,它可以生成一个 Dump 文件。

  1. 下载 Debug Diagnostic Tool v2 Update 3[5]
  2. 点击 "DebugDiag 2 Collection" (在开始菜单中可用)
  3. 配置一个规则,比如说当应用程序崩溃的时候
  4. 当条件得到满足时,会在配置的文件夹中生成一个崩溃 Dump。

Visual Studio

如果你正在调试一个应用程序,你可以直接从 Visual Studio 保存一个转储文件。打开 "调试 "菜单,点击 "将转储另存为... "菜单项。

WinDbg

如果你正在使用 WinDbg 调试一个应用程序,你可以使用.dump命令来生成一个转储文件。/ma选项允许为所有连接的进程生成一个 minidump:

代码语言:javascript复制
.dump /ma [path]

Windows Error Reporting

Windows 错误报告允许在应用程序崩溃时生成一个转储文件。你可以查看我以前关于它的帖子。出错时自动创建崩溃转储文件[6] "Tip: 在出错时自动创建一个崩溃转储文件"。

Linux

dotnet-dump (Linux)

dotnet-dump 全局工具[7]是一种收集和分析.NET 核心应用程序转储的方法。

安装 dotnet-dump (必须 .NET SDK) 或者 下载它[8]

代码语言:javascript复制
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 文件。

  1. 选择你的应用程序服务
  2. 转到 "诊断和解决问题"
  3. 选择 "诊断工具"
  1. 选择 "收集内存转储"
  2. 点击 "收集内存转储 "按钮
  3. 几分钟后,转储在配置的存储账户中可用。

版权

原文版权: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

0 人点赞