首页 文章详情

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

DotNet NB | 139 2022-11-03 19:14 0 0 0
UniSMS (合一短信)

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

Windows 平台

dotnet-dump (Windows)

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

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

    dotnet tool install --global dotnet-dump
  2. 使用ps命令找到进程 Id

    dotnet-dump ps
  3. 通过指定的进程 id 创建 dump 文件

    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 文件。

  1. 下载 ProcDump: ProcDump[4]

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

    procdump notepad
    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:

.dump /ma [path]

Windows Error Reporting

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

Linux

dotnet-dump (Linux)

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

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

    dotnet tool install -g dotnet-dump
  2. 使用下面的命令找到进程 Id

    dotnet-dump ps
  3. 通过指定的进程 id 创建 dump 文件

    dotnet-dump collect --type heap --process-id <ProcessId>

SysInternals - ProcDump (Linux)

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

  1. 下载 ProcDump for Linux: ProcDump For Linux[9]

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

    procdump 4572

Azure App Services

Azure 允许我们为 App 服务生成和分析 Dump 文件。

  1. 选择你的应用程序服务

  2. 转到 "诊断和解决问题"

  3. 选择 "诊断工具"

  4. 选择 "收集内存转储"

  5. 点击 "收集内存转储 "按钮

  6. 几分钟后,转储在配置的存储账户中可用。

版权

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

推荐阅读:
浅析C# Dictionary实现原理
.NET 6 +Hangfire 实现定时任务管理
12个 C# 11 特性
使用.NET从零实现基于用户角色的访问权限控制
.NET性能优化-使用ValueStringBuilder拼接字符串
.NET周报【10月第3期 2022-10-25】

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2021开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter