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

Windows平台

dotnet-dump (Windows)

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

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

    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
  2. 打开 Process Explorer
  3. 右击进程选择 "Create Dump" 项

]

SysInternals - ProcDump (Windows)

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

  1. 下载 ProcDump: ProcDump

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

    procdump notepad
    procdump 4572

调试诊断工具

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

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

Visual Studio

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

WinDbg

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

.dump /ma [path]

Windows Error Reporting

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

Linux

dotnet-dump (Linux)

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

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

    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

  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

创建.NET程序Dump的几种姿势的更多相关文章

  1. SharePoint 2013 代码创建应用程序目录(App Catalog)

    众所周知,SharePoint App是2013版本的一大特色,那么,关于App的分发有几种方式呢?SharePoint给我们提供了两种方式,一种是上载到SharePoint应用商店,另一种是在本地S ...

  2. Thread类的常用方法_sleep和创建多线程程序的第二种方式_实现Runnable接口

    sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就 ...

  3. 创建多线程程序的第一种方式_创建Thread类的子类

    创建多线程程序的第一种方式:创建Thread类的子类java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个Thread类的子类 ...

  4. 主线程和创建多线程程序的第一种方式_创建Thread类的子类

    /** * 主线程:执行主方法的线程(main) * 单线程程序:在java程序中只有一个线程 * 执行从main方法开始,从上倒下依次执行 */ public class Demo01MainThr ...

  5. python HelloWorld 的 4 种姿势,你知道几种

    安装完 Python 之后该干啥,当然是要 say HelloWorld 了. python.exe 就是个普通程序 和其它所有命令一样,在命令行中敲下 python 并回车的时候,操作系统去 PAT ...

  6. Python 高级特性介绍 - 迭代的99种姿势 与协程

    Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...

  7. 浅谈OC对象初始化的三种姿势

    一.普通程序猿普通程序员使用最常见路人姿势等场.普普通通,纯属陆仁辈. 陆仁贾写法: // view 1 UIView *v1 = [UIView alloc] initWithFrame:CGRec ...

  8. 改善C#程序,提高程序运行效率的50种方法

    改善C#程序,提高程序运行效率的50种方法   转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html 一.用属性代替可访问的字段 1..NET ...

  9. 快速了解IOC的几种姿势

    一.首先我们了解IOC如何注入的几种姿势 构造函数注入(Constructor Injection) Ioc容器会智能的选择和调用合适的构造函数以创建依赖的对象.如果被选择的构造函数具有相应的参数,I ...

随机推荐

  1. ipi发送阻塞导致crash

    3.10的内核, 在子进程退出的时候,发送信号通知父进程,此时是持有父进程的sighand中的spinlock的,然后父进程和该子进程不在一个核上,发送ipi的reschedule中断给对应的核, 但 ...

  2. 3-14 Python处理XML文件

    xml文件处理 什么是xml文件? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 从结构上,很像HTML超文本标记语言.但他们被设计的目的 ...

  3. 【MySQL】从入门到掌握2-下载安装

    上期:[MySQL]从入门到掌握1-一些背景知识 第一章:下载 官网下载地址: https://dev.mysql.com/downloads/mysql/ https://dev.mysql.com ...

  4. Order Siblings by 排序

    在层次查询中,如果想让"亲兄弟"按规矩进行升序排序就需要使用ORDER SIBLINGS BY 这个特定的排序语句,若要降序输出可以在其后添加DESC关键字. 通过这个实验给大家展 ...

  5. Linux_ps总结

    ps命令用于监测进程的工作情况.进程是一直处于动态变化中,而ps命令所显示的进程工作状态时瞬间的 使用方式: ps [options] 常用参数 -A 显示所有进程 -a 显示现行终端机下的所有进程, ...

  6. Scanner中nextInt()和nextline()读取字符串的问题

    Scanner中nextInt()和nextline()读取字符串的问题 import java.util.Scanner; public class Main { public static voi ...

  7. [python]-random模块-手动随机数

    random模块通常用来生成随机数,结合time模块生成随机数的代码: import time import random random.seed(time.time()) x = random.ra ...

  8. 使用Elasticsearch Operator快速部署Elasticsearch集群

    转载自:https://www.qikqiak.com/post/elastic-cloud-on-k8s/ 随着 kubernetes 的快速发展,很多应用都在往 kubernetes 上面迁移,现 ...

  9. 安装 Helm3 管理 Kubernetes 应用

    文章转载自:http://www.mydlq.club/article/51/ 系统环境: Helm 版本:v3.5.0 Kubernetes 版本:v1.18.2 一.Helm 介绍 Helm 是一 ...

  10. MySQL集群搭建(1)-主备搭建

    数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...