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

Windows平台

dotnet-dump (Windows)

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

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

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

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

    1. 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

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

  1. .dump /ma [path]

Windows Error Reporting

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

Linux

dotnet-dump (Linux)

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

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

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

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

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

SysInternals - ProcDump (Linux)

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

  1. 下载 ProcDump for Linux: ProcDump For Linux

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

    1. 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. openjdk的bug

    容器内就获取个cpu利用率,怎么就占用单核100%了呢 背景:这个是在centos7 + lxcfs 和jdk11 的环境上复现的 下面列一下我们是怎么排查并解这个问题的. 一.故障现象 oppo内核 ...

  2. BeanUtils.copyProperties的使用方法

    BeanUtils.copyProperties的使用方法 1.使用的是springframe包下的,BeanUtils.copyProperties(a,b) 把a属性拷贝给b属性 2.注意事项: ...

  3. 【Homebrew】安装

    /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 官网安 ...

  4. Linux虚拟机启动报错operating system not found解决步骤

    此报错为硬盘上的启动代码丢失 实验准备步骤 1) 准备: dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 2) 系统启动报错截图 修复步骤如下 第一步:选 ...

  5. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  6. Lua 支持虚函数的解决方案

    概述 lua本身没有提供类似C++虚函数机制,调用的父类方法调用虚函数可能会出现问题. 问题分析 分析这段代码和输出 local Gun = {} -- 示例,实际应用还要考虑构造,虚表等情况 fun ...

  7. 如何为 SAST 工具设置误报基准?

    许多 SAST 工具都无法避免误报的问题.这些工具经常报告一些实际不存在的漏洞,这种不准确性让安全团队耗费大量时间来对误报进行分类和处理,这时设置误报基准就显得十分必要. 通过设置误报基准,安全团队可 ...

  8. 实践torch.fx第二篇-fx量化实操

    好久不见各位,哈哈,又鸽了好久. 本文紧接上一篇<实践torch.fx第一篇--基于Pytorch的模型优化量化神器>继续说,主要讲如何利用FX进行模型量化. 为什么这篇文章拖了这么久,有 ...

  9. kvm上已安装的虚拟机修改为桥接网络

    kvm上安装的虚拟机默认使用的nat网络格式,现在已经调整kvm主机为桥接方式了,但是已经安装的虚拟机还是nat方式,所以需要修改一下 让KVM虚拟主机使用桥接网络br0 修改虚拟机的配置文件,默认存 ...

  10. 回滚Deployment控制器下的应⽤发布

    若因各种原因导致滚动更新⽆法正常进⾏,如镜像⽂件获取失败."⾦丝雀"遇险等,则应该将应⽤回滚到之前的版本,或者回滚到由⽤户指定的历史记录中的版本. Deployment控制器的回滚 ...