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

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. Linux安装mysql mysql5.5.40 <NIOT>

    一.    操作系统与软件 操作系统及版本 Centos 6.4 依赖包 gcc.gcc-c++.cmake.ncurses-devel 下载目录 /opt Mysql安装目录 /usr/local/ ...

  2. Mysql索引基础

    Mysql索引基础 基本概念: 索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录.索引是提高数据库性能的重要方式.索引创建在表上,是对数据库表中一列或多列的值进行排序的一种结构.可以提 ...

  3. 记一次-angular-数字格式化

    一个收费功能模块,需要做数据验证. input标签的ng-model的数据格式化 <input type="number" class="form-control& ...

  4. 换行符在ajax中返回json,eval时发生的 Unexpected token ILLEGAL

    用户如果输入了换行在数据中记录为‘空格’,但不是真正的空格. 程序前台采用ajax和json返回数据绑定时会 出现 Unexpected token ILLEGAL 例子: 在sql中存储为下图 在“ ...

  5. iOS 10权限崩溃问题

    手机升级到iOS10 Beta版本后,再次进行真机调试时会遇见权限崩溃问题,崩溃原因如下:This app has crashed because it attempted to access pri ...

  6. C-Free 5.0编译失败问题解决办法

    解决关于C-Free 5.0编译时提示错误:[Error] undefined reference to `__dyn_tls_init_callback' 解决办法: 因为错误提示的路径是C:\Mi ...

  7. 辽宁OI2016夏令营模拟T3-chess

    放棋子(chess.pas/c/cpp)题目大意现在有一个 n*m 的棋盘,现在你需要在棋盘上摆放 2n 个棋子,要求满足如下条件:1. 每一列只能有一个棋子:2. 每一行的前 xi 个格子有一个棋子 ...

  8. [妙味JS基础]第七课:运算符、流程控制

    知识点总结 &&(与).||(或).!(非) 与: alert(20 && 20>100) => false alert(20 && 20& ...

  9. UVa 12100 Printer Queue (习题 5-7)

    传送门:https://uva.onlinejudge.org/external/121/12100.pdf 题意:队列中待打印的任务(1 <= n <= 100)带有优先级(1-9), ...

  10. 《JS权威指南学习总结--第7章 数组》

    内容要点: 一. JS数组是无类型的:数组元素可以是任意对象,并且同一个数组中的不同元素也可能有不同的类型.数组的元素甚至也可能是对象或其他属性,这允许创建复制的数据结构,如对象的数组和数组的数组. ...