一、Windows系统的任务管理器里抓dump

启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件"

注意事项:

当你在64位Windows系统上抓32位进程的dmup文件时,如果用的是64位任务管理器,那么在用Windbg加载后,要用!wow64exts.sw切换到X86模式下,如果不想做这步切换,就要用32位的任务管理器来生成dmp文件。32位任务管理器在C:\Windows\SysWOW64\Taskmgr.exe

适合的场景:在任务管理器里还能看到进程,当程序出现业务问题、性能问题、失去响应;当程序崩溃跳出系统错误提示框的时候,特别适合应用在客户机出现上述问题时使用。因为我们不用传其他工具到客户机上

二、用Windbg来抓取

2.1、方法一:启动windbg ,附加到我们关心的进程,执行命令 .dump [/ma/mdi] [存放路径]

适合的场景:在任务管理器里还能看到进程,当程序出现业务问题、性能问题、失去响应;当程序崩溃跳出系统错误提示框的时候,适合在公司内部测试时开发人员和测试人员使用

2.2、方法二  监视特定进程,当某进程崩溃时自动抓取dump

先运行可能存在问题的程序,然后执行命令在命令行里 执行 ..\WinDbg\adplus.vbs(exe) -crash -pn qq.exe -o c:\1.dmp。运行此命令后,WinDbg会跳出黑色窗口,用于监控进程的运行状况,注意不要关闭这个窗口,否则Dump就抓不到了。在目标进程里执行业务操作,当崩溃后,Dump文件会保存在指定的输出路径里。

在指定的输出目录下生成如下目录

参数说明:

  • -crash: 当程序挂掉的一刹那抓取Dump,这个参数只能抓到程序报错时的信息,如果程序不报错,则无法抓到Dump。
  • -hang: 当开启WinDbg之后就开始抓取Dump,主要用于抓取程序异常,但程序未崩溃的情况,例如进程的CPU使用率100%。
  • -pn:进程的PID或进程名,如果是进程名,会区分大小写。
  • -o: Dump输出路径.

适合的场景:程序已经运行但不知道什么时候会崩溃且不会有错误提示框的情况。

2.3、方法三 将Windbg设置为默认调试工具

首先,执行 在命令行Windbg.exe -I 设置为默认调试工具,会弹出Windbg窗口

点“确定”窗口消失,然后运行程序和操作,当程序崩溃时WibDbg窗口再次弹出来,在windbg 命令行执行命令.dump [/ma/mdi] [存放路径]

参数说明:

-I: 将WinDbg作为默认的调试工具,注意I必须为大写,小写无效。

适合的场景:不知道什么时候会崩溃。无需指定要抓取的进程或PID,也不要求设置环境时必须存在进程,只要任意程序崩溃后都可以抓到Dump。

三、修改注册表

@echo off  
echo 正在启用Dump...  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\CrashDump" /f  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f  
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f  
echo Dump已经启用  
pause  
@echo on

将上述内存保存为*.bat,然后执行,就开始了自动抓dmp文件的功能,只要有程序崩溃,就会在指定的目录下生成。

键值说明:

名称:DumpCount,类型:REG_DWORD,最大保留Dump个数,默认为10.
名称:DumpType,类型:REG_DWORD,Dump类型(1-Mini dump, 2-Full dump),默认为1.
名称:DumpFolder,类型:REG_EXPAND_SZ,Dump文件保存的位置。

当不需要自动抓取时,可以将下面的内容

@echo off  
echo 正在关闭Dump...  
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /f  
echo Dump已经关闭  
pause  
@echo on

保存为bat执行,就不会在自动产生了

适合的场景:也是不知道什么时候程序会崩溃,也无法确定崩溃是否会重现,只要有崩溃就会被抓取,万无一失。

四、编程

直接使用Windows的API——MiniDumpWriteDumpSetHandleExceptionFilter。在我们自己的应用里使用这两个API来实现程序崩溃时自动产生dump文件,并且还可以实现自己的dump上传机制等,不过要注意如果某些库会导致我们程序的机制失效。

五、Process Explorer

这个也是要注意在64位机上抓32位进程的问题,跟任务管理一样处理

写在最后:当然还有更多的工具和方法,包括上面介绍的工具和方法,我们可以根据实际情况和需要灵活应用,抓取dmp文件来帮助我们调试定位问题

抓取Dump文件的方法和工具介绍的更多相关文章

  1. WinDbg-如何抓取dump文件

    这要分两种情况:第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后 ...

  2. WinDbg抓取程序报错dump文件的方法

    程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点 ...

  3. 使用ProcDump工具抓取dump

    首先得到要抓取的进程号 cd %windir%\syswow64\inetsrvappcmd list wp得到pid之后, 在任务管理器里发现w3wp.exe的CPU总在49%-60%左右, 间歇性 ...

  4. 转:介绍一个好用的抓取dump的工具-ProcDump

    介绍一个好用的抓取dump的工具-ProcDump Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash ...

  5. 好用的抓取dump的工具-ProcDump

    Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原 ...

  6. 你需要知道的 N 种抓取 dump 的工具

    原总结注册表debug调试dump转储文件windbgprocdump 前言 今天,向大家介绍几种可以抓取应用程序转储文件的工具及基本使用方法.更详细的用法,请参考每个工具对应的帮助文档.如果你还不清 ...

  7. 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法

    下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片   将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...

  8. IIS崩溃时自动抓取Dump

    背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...

  9. 调试SQLSERVER (一)生成dump文件的方法

    调试SQLSERVER (一)生成dump文件的方法 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置调试SQLSERVER (三)使用Windbg调试SQLSERVER ...

随机推荐

  1. 忘记token怎么加入k8s集群

    一.概述 新版本的k8s,初始化生成的token,只有24小时.超过时间,就得需要重新生成token,为了避免这种情况,直接生成永久的token 二.操作步骤 1.生成一条永久有效的token kub ...

  2. Java自学-控制流程 If

    Java的 If 条件语句 条件判断 示例 1 : if if(表达式1){ 表达式2: } 如果表达式1的值是true, 就执行表达式2 public class HelloWorld { publ ...

  3. 手写MVC框架(二)-代码实现和使用示例

    --------上一篇:手写MVC框架(一)-再出发----- 背景 书接上文,之前整理了实现MVC框架需要写哪些东西.这周粗看了一下,感觉也没多少工作量,所以就计划一天时间来完成.周末的时间,哪会那 ...

  4. 非洲affrike单词

    affrike 英文单词,含义是非洲,非洲大陆. 中文名:非洲 外文名:affrike 目录 释义 affrike noun名词 非洲,也用做africa 1.Word Origin and Hist ...

  5. Solr字段类型

    一.一般属性 1.name fieldType的名称.该值用于字段定义中的类型属性,强烈建议名称仅包含字母数字和下划线,不能以数字开头[非强制]. 2.class 用于存储和索引此类型数据的类名.可以 ...

  6. Ubuntu安装32位程序兼容包

    有的交叉编译工具链是32位的,经常会遇到安装完成之后提示好不到,这时候需要安装32位兼容程序,使用以下命令安装: sudo apt-get update sudo apt install gcc-mu ...

  7. Linux 磁盘配额(XFS & EXT4)

    若是在Linux中搭建了FTP服务器,为了安全性,就要考虑磁盘配额,以防服务器磁盘空间被恶意占满. 磁盘配额概述 1.作用范围:只在指定的分区有效. 2.限制对象:主要针对用户.组进行限制,对组账号限 ...

  8. 如何进行SQL注入攻击?

    1.数字注入 2.字符串注入 3. #后边全部为注释,字符串拼装后绕过密码验证. 4. 同样绕过密码验证

  9. PAT甲级1010踩坑记录(二分查找)——10测试点未过待更新

    题目分析: 首先这题有很多的坑点,我在写完之后依旧还有第10个测试点没有通过,而且代码写的不优美比较冗长勿喷,本篇博客用于记录写这道题的一些注意点 1.关于两个不同进制的数比大小一般采用将两个数都转化 ...

  10. django项目登录中使用图片验证码

    应用下创建untils文件夹放置封装图片验证码的函数 创建validCode.py文件定义验证码规则 import random def get_random_color(): return (ran ...