使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump
前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump。有了Dump后,我们可以很迅速的解决问题,比如说IE崩溃,QQ崩溃,很多时候我们是一点头绪都没有的,但是有了WinDbg后,这一切将变的简单!虽然WinDbg并不能帮你解决问题,但是他可以指导你解决问题的方向!
今天将和大家介绍2种程序崩溃的现象与4种dump抓取方法!
第一种崩溃:有报错界面
程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭。例如“应用程序错误”,“C++错误之类的窗口”,“程序无响应”,“假死”等,下图就是一个IE应用程序错误的示例图片:
这种崩溃现象的特点是:
程序已经异常,在你未点击出错窗口的确定或其他按钮时,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知道怎样操作可以让程序崩溃,也可以用守株待兔的抓取方法去抓Dump问文件。
推荐使用抓取方法三,因为这个抓取方法可以在你看到错误时就第一时间抓取到Dump,只要出现问题时,叫人保留这个出错窗口,然后你去抓就行了。当然如果你未能及时抓取到这个Dump的话,也可以用其他方法。
第二种崩溃:程序窗口自动消失或自动关闭
程序在运行中的时候,窗口或进程突然消失,没有任何错误窗体。典型的现象就是IE自动关闭,比如你连续打开几个IE窗口,关闭其中任意一个窗口时,所有IE窗口都消失了。或者玩着玩着游戏,游戏界面自动消失等。
这种崩溃现象的特点是:
程序是自动崩溃的,当程序崩溃后,所有错误信息就都消失了,如果你要抓取这种崩溃的Dump,就必须先设置好抓取环境,否则是无法抓取到Dump文件的,因此,这种现象用方法一,方法二,方法四都可以,因为方法三是要有报错界面才抓的了,所以方法三不适用于这种现象。
这就是目前最常见的两种程序崩溃现象,接下来和大家分享下程序Dump的方法。
抓取方法一:
该方法特点:
1、必须指定要抓取的进程或PID,同时程序必须已经在运行,否则无法抓Dump。
2、必须在出现问题之前,先布置好抓取环境。
3、正常关闭进程也会出现Dump文件,因此需要确定抓到的Dump是在程序崩溃时生成的。
第一步:下载需要使用的工具:
下载Windbg:WinDbgx86版本、WinDbgx64版本:
第二步:设置WinDbg抓取环境。
先运行可能存在问题的程序,例如IE,如果不先运行程序,则无法抓Dump。然后将本站提供的WinDbg解压到任意盘符,例如C盘,使用下面的参数抓取Dump。
C:\WinDbg\adplus.vbs -crash -pn iexplore.exe -o d:
运行该命令后,WinDbg会跳出黑色窗口,用于监控进程的运行状况,注意不要关闭这个窗口噢,否则Dump就抓不到了。
WinDbg参数说明:
-crash:当程序挂掉的一刹那抓取Dump,这个参数只能抓到程序报错时的信息,如果程序不报错,则无法抓到Dump。
-hang:当开启WinDbg之后就开始抓取Dump,主要用于抓取程序停止响应,但程序未崩溃的情况,例如进程的CPU使用率100%。
详见微软知识库:http://support.microsoft.com/kb/286350/ZH-cn(如果你搞不明白-crash和-hang的差别,那么推荐使用-crash参数。)
-pn:进程的PID或进程名,如果是进程名,会区分大小写。
-o:Dump输出路径。
第三步:收集Dump文件。
当程序崩溃后,Dump文件会保存在指定的输出路径内,例子中的Dump保存路径就是D盘了,然后打包Dump文件,提交给软件官方,供官方分析即可。
抓取方法二:
该方法特点:
1、无需指定要抓取的进程或PID,也不要求设置环境时必须存在进程,只要任意程序崩溃后都可以抓到Dump。
2、必须在出现问题之前,先布置好抓取环境。
3、程序正常关闭时,比如点x时,不会生成Dump,只有程序崩溃时才会生成。
第一步:下载需要使用的工具:
下载Windbg:WinDbgx86版本、WinDbgx64版本:
第二步:设置WinDbg抓取环境。
找到Windbg安装路径,并将windbg以“-I”参数运行,注意“I”是大写的。
C:\WinDbg\Windbg.exe -I
运行该参数时,WinDbg会弹出一个提示,点击确定后WinDbg界面会消失,如下图:此时就代表环境已经设置好,现在就需要你想方设法让程序崩溃,比如让IE崩溃。
WinDbg参数说明:
-I:将WinDbg作为默认的调试工具,注意I必须为大写,小写无效。
第三步:收集Dump文件。
在程序崩溃时,WinDbg窗口再次弹出来时,使用以下命令保存Dump文件。
.dump -ma d:\test.dmp
如下图:
当开始保存Dump文件时,左下角的状态信息会变成*Busy*,表示WinDbg正在工作,Dump保存完成后会出现“Dump successfully written”这个提示,如下图:
接下来就是等Dump保存好,然后把dump文件打包提供给软件官方即可。
抓取方法三:
该方法特点:
1、可以在程序报错后,直接抓取Dump文件,不需要额外设置,适用于突然发现报错,且不确定能否复现问题时抓取Dump,这是一个非常重要的抓取方法,强烈建议大家记住。
第一步:下载需要使用的工具:
下载ProcessExplorer:该工具是用于定位报错窗口的进程PID;
下载Windbg:WinDbgx86版本、WinDbgx64版本:
第二步:使用ProcessExplorer报错窗口所属的进程PID(什么是PID请见文章尾部)
先运行ProcessExplorer,然后鼠标左键按住界面上的瞄准镜图标,然后拖动到报错的窗口上松开鼠标,如图:
此时,ProcessExplorer会自动定位到出错的进程上面,然后记住出错进程的PID,例如下图中QQ.exe的PID就是2960。
第三步:运行WinDbg,抓取Dump文件。
运行WinDbg后,依次点击“File”=》“Attach to a Process”,如下图:
在弹出的界面中,找到刚才捕捉到的PID,然后点OK。
点完OK后,你就会看到可以抓取Dump的界面啦,再用dump保存参数保存Dump即可。
.dump -ma d:\test.dmp
WinDbg参数说明:
-m:缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。
-ma:带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。
-mFhutwd:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。
抓取方法四:
该方法特点:
1、使用系统自带的华生医生来抓取Dump,简单,但是有时会不灵光,部署的性质有点类似方法二。
第一步:下载需要使用的工具:
虽然华生医生是系统自带的工具,但是基本大部分操作系统都把这个工具给精简掉了,大家可以下载附件中的绿色版,解压后直接运行即可,运行后会把一切都设置好。点击下载华生医生绿色版。
第二步:坐收Dump文件。
当你运行过本站提供的drwtsn32(华生调试器).exe后,遇到程序崩溃时,会自动生成Dump文件到C:根目录,文件名为drwtsn32.log和user.dmp,把这2个文件打包提交给官方分析即可。
至此,WinDbg非常常用的抓程序崩溃Dump的方法基本已经全了,希望大家以后再碰到程序崩溃时,不再是只提供错误截图,而是可以提供Dump供分析!
另外,网维大师用户如果遇到IE崩溃问题,可采用以上Dump抓取方法,直接提供Dump文件给在线客服,这样可提高解决问题的效率,快速帮大家解决问题!
最后一个小知识点:什么是进程PID?
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。
PID一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。只要没有成功运行其他程序,这个pid会继续分配给当前要运行的程序,如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个pid。要查看PID的话就打开任务管理器–查看– 选择列–PID,就可以看到了。
使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump相关推荐
- 使用WinDbg抓取程序报错的Dump文件
使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump,教程 前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump.不过还是先来段 ...
- 小程序报错[ app.json 文件内容错误] app.json: app.json 未找到
当你开发小程序出现这个报错说什么找不到app.json,但实际已经有了. 我百度了一阵找到了问题:微信web开发者工具在建立项目.添加项目时选择的项目目录的文件夹下不能有次级文件夹:若是有次级文件,即 ...
- 谷粒商城集群篇爬坑笔记--Gitee拉取项目报错、项目target文件不存在(部分项目不全)、SonarQube报错
Gitee拉取项目报错 问题描述 Gitee拉取可能会报错: ERROR: Error cloning remote repo 'origin' hudson.plugins.git.GitExcep ...
- ABBYY 填坑!!!多人员调用ABBYY转换任务时,就会出现程序报错
项目运行过程中发现ABBYY微服务经常莫名其妙死掉,后来和ABBYY技术人员沟通了解到 ABBYY转换引擎只有卸载掉,才可以进行下一次转换!!!!!!!!!! 项目运行过程中,多个人员调用ABBYY转 ...
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...
- SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析
SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析 所在项目客户的一家工厂上线已经超过半年,其业务部门提出一个使用了半年的RF枪程序,突然不能使用了.程序直接Dump ...
- 【错误记录】执行 Python 程序报错 ( NameError: name ‘reload‘ is not defined )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Windows 的 cmd 命令行运行 python 脚本时 , 报如下错误 : 执行 python ApkTool.py -analyse - ...
- 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )
文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : D:\002_Project\011_Python\APK\venv\Scripts\python ...
- 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
文章目录 一.报错信息 二.解决方案 一.报错信息 PyCharm 运行 Python 程序报错 : PEP 8: E402 module level import not at top of fil ...
最新文章
- mysql 单标递归_MySQL递归CTE(公共表表达式)
- 使用Spring MVC统一异常处理实战
- crtmpserver 配置说明_crtmpserver流媒体服务器的介绍与搭建
- 【EXLIBRIS】纸版书目整理 -- 大书架 上 【292 种】【327册】
- qt自定义控件_Qt编写自定义控件60-声音波形图
- P1160 队列安排 (模拟链表)
- 人工智能机器学习深度学习TensorFlow最新学习视频资料
- WIN10不显示sql2005服务器,win10系统安装sQLserver2005提示“sQL server服务无法启动”的设置办法...
- 华为交换机作为AC的条件
- 电气CAD批量打印为PDF笔记
- C语言博客作业--一二维数组
- 金蝶迷你版所有数据引出excel没有反应,如何处理
- 12306模拟登陆-超级鹰
- Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife
- 商汤科技徐立:AI 将在10 年内创造一个印度和中国的总产值
- 【Torch】Dataloader torch.utils.data.DataLoader全面详实概念理解
- servlet part对象文件上传
- Android开发,你必须知道的四大天王。
- [转载]软件测试从零开始
- 杰奇cms mysql查询_杰奇cms自动推送链接插件使用方式
热门文章
- 中国智能网联汽车技术规程-基础行车辅助测评细则
- photoshop android 切图插件,CutSlice me 切图神器(PhotoShop强力割图插件)
- AltiumDesigner 设置焊盘在钢网上是否开孔的办法
- echarts-折线图-echarts字体大小自适应
- 如何使用python自动登录路由器且获取页面内容
- php 生成PDF的方法之一 --mpdf使用
- 购物车 怎么计算总价 php,Magento购物车价格计算的功能实现代码
- [BZOJ2879][Noi2012]美食节(费用流)
- Goolge页面展示3D效果问题
- Kyligence 架构师:Spark tunning in Apache Kylin