程序崩溃的两种主要现象:

a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭

例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等

此种崩溃特点:程序已异常,在你未点出错窗口的确定或其他按,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知道

怎么样操作可以让程序崩溃,也可以用守株待兔的抓取方法抓Dump文件。

b.程序在运行中的时候,窗口和进程突然消失,没有任何错误窗体

典型的现象:程序自动关闭 或者玩游戏时,游戏界面自动消息等。

此种崩溃的特点:程序是自动崩溃的,当程序崩溃后,所有错误信息就都消息了,如果你要抓取这种崩溃的Dump,就必须先设置好抓取环境,否则是无

法抓取Dump文件的。

以上是两种最常见的程序崩溃现象,下面分享利用Windbug工具抓取dump文件的方法。

a. 抓取方法一

此方法特点:

1. 必须指定要抓取的进程或PID,同时程序必须已经在运行,否则无法抓dump.

2.必须在出现问题之前,先布置好抓取环境。

3.正常关闭进程也会出现DUMP文件,因此需要确定抓到的Dump是在程序崩溃时生成的。

step1: 下载需要使用的工具

windbg: 此工具是抓取dump的主角。

step2: 设置Windbg抓取环境

先运行可能存在问题的程序,例如:IE,如果不先运行程序,则无法抓Dump。

然后将下载的Windbg解压到任意盘符,例如C盘,使用下面的参数抓取Dump。

C:\WinDbg\adplus.vbs -crash -pn ieexplore.exe -o d:

运行此命令后,WinDbg会跳出黑色窗口,用于监控进程的运行状况,注意不要关闭这个窗口,否则Dump就抓不到了。

WinDbg参数说明:

-crash: 当程序挂掉的一刹那抓取Dump,这个参数只能抓到程序报错时的信息,如果程序不报错,则无法抓到Dump。

-hang: 当开启WinDbg之后就开始抓取Dump,主要用于抓取程序异常,但程序未崩溃的情况,例如进程的CPU使用率100%。

-pn:进程的PID或进程名,如果是进程名,会区分大小写。

-o: Dump输出路径.

step3:收集Dump文件

当程序崩溃后,Dump文件会保存在指定的输出路径内,例子中的Dump保存路径是D盘,然后打包Dump文件,提交给软件官方。

b.抓取方法二

此方法特点:

1. 无需指定要抓取的进程或PID,也不要求设置环境时必须存在进程,只要任意程序崩溃后都可以抓到Dump。

2. 必须在出现问题之前,先布置好抓取环境。

3.程序正常关闭时,比如点X时,不会生成Dump,只有程序崩溃时才会生成。

step1:下载需要使用的工具

step2:设置WinDbg抓取环境

将下载的工具解压到任意盘符,比如C盘,使用下面的参数抓取Dump:

C:\WinDbg\Windbg.exe -I

运行此参数时,Windbg会弹出一个提示,点确定后Windbg界面会消失,此时代表环境已经设置好,现在就需要你想方设法让程序崩溃,比如IE崩溃。

WinDbg参数说明:

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

Step3:收集Dump文件

在程序崩溃时,WibDbg窗口再次弹出来时,使用以下命令保存Dump文件。

.dump -ma d:\test.dmp

当开始保存Dump文件时,左下角的状态信息会变成*Busy*,表示WinDbg正在工作,Dump保存完成后会出现"Dump successfully written"这个提示,接

下来就等Dump保存好,然后把Dump文件打包提交软件官方。

c.抓取方法三

此方法特点:

可以在程序报错后,直接抓取Dump文件,不需要额外设置,适用于突然发现报错,且不确定能否复现问题时抓取Dump,这是一个非常重要的抓取方法,

强烈建议大家记住。

step1:下载需要使用的工具

ProcessExplorer:此工具用于定位报错窗口的进程ID

step2:使用ProcessExplorer定位报错窗口的进程PID

step3:运行WinDbg,抓取Dump文件

运行Windbg后,依次点”File" --> "Attack to a Process" ,在弹出的界面中,找到刚才捕捉到的PID,然后点OK.

点OK完成后,你就会看到可以抓取的Dump界面了,再用dump保存参数保存dump即可。

.dump -ma d:\test.dmp

WinDbg参数说明:

-m: 却省选项,生成标准的minidump,转储文件通常较小,便于在网络上通过邮件或其它方式传输。这种文件的信息量较少,只包含系统信息、加载的模块DLL信息,

进程信息和线程信息。

-ma:带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块等等),文件较大,但如果条件允许(本机调试,局域网环境),推荐用这个。

-mFhutwd: 带有数据段,非共享的读、写内存页和其他有用的信息的minidump,包含了通过minidump能够得到的最多的信息。是一种折中方案。

WinDbg抓取程序报错dump文件的方法的更多相关文章

  1. Windbg抓取程序崩溃的dmp文件的方法

    Windbg抓取程序崩溃的dmp文件的方法 一.        简介 windbg是在windows平台下,强大的用户态和内核态调试工具.相比较于Visual Studio,它是一个轻量级的调试工具, ...

  2. 关于小程序报错 缺少文件,错误信息:error: iconPath=../images/home.png, file not found

    事实上在小程序中,虽然你的image文件夹是和你index文件夹的父级文件夹并行的文件夹,但是你如果引用的时候,不用去遵循    ../   或者   ./因为在小程序当中他根本不识别.所以要引用的话 ...

  3. jsoup抓取网页报错UnsupportedMimeTypeException

    今天在用Jsoup爬虫的时候两次遇到下面错误 Exception in thread "main" org.jsoup.UnsupportedMimeTypeException: ...

  4. 抓取Dump文件的方法和工具介绍

    一.Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件 ...

  5. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  6. Window7中Eclipse运行MapReduce程序报错的问题

    按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...

  7. 创建一个MVC解决方案,添加一个控制器后,运行程序报错:”/"未找到服务器

    1.创建一个MVC项目,如图

  8. docker拉取镜像报错:net/http: TLS handshake timeout.

    docker拉取镜像报错:net/http: TLS handshake timeout. 启动一个后台的busybox容器 [yunva@node1 network-scripts]$ docker ...

  9. 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介

    一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...

随机推荐

  1. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  2. C#的初步学习,心得

  3. 无法启动T-SQL调试。未能连接到计算机"."。这是在主机名解析时通常出现的暂时错误……

    今天在按在SSMS中,按F11进行断点调试时,弹出错误:"无法启动T-SQL调试.未能连接到计算器".".这是在主机名解析时通常出现的暂时错误--", 如下图: ...

  4. redis7--hash set的操作

    数据类型Hash(1)介绍hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似Redis本身就类似于Hash的存储结构,分为key-value键值对,实际上它的Hash数据就好像是在R ...

  5. Gdiplus 贴图(助记) -------------------从资源中载入PNG图片

    从资源中载入图片,亦可改为从内从中加载: void LoadResImage(int nResID,Image * &lpImage) { HINSTANCE hIns=AfxGetInsta ...

  6. Linux下查看access访问日志IP统计命令

    查看 access.Log 文件ip统计 cat access.log |awk '{print $1}'|uniq -c |sort -k1,1nr 去掉r则从高到低 cat access.log ...

  7. Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)

    一.PropertyPlaceholderConfigurer类的作用 PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFact ...

  8. 大数据时代之hadoop(二):hadoop脚本解析

    “兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...

  9. word-wrap、word-break、white-space

    http://jsfiddle.net/joya0411/S8N2j/3/embedded/result/ word-wrap:normal(默认)/break-word; 希望超长英文/网址,在下一 ...

  10. Spring Security(06)——AuthenticationProvider

    目录 1.1     用户信息从数据库获取 1.1.1    使用jdbc-user-service获取 1.1.2    直接使用JdbcDaoImpl 1.2     PasswordEncode ...