使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump

前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump。不过还是先来段废话,为什么要学抓Dump?有啥用?因为有了Dump后,我们可以很迅速的解决问题,比如说IE崩溃,QQ崩溃,很多时候我们是一点头绪都没有的,但是有了WinDbg后,这一切将变的简单!虽然WinDbg并不能帮你解决问题,但是他可以指导你解决问题的方向!

ok,言归正传!

首先说下,程序崩溃的两种主要现象,了解这两种现象的核心价值在于,可以更快,更准确的抓取Dump文件。

第一种崩溃:程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭。
例如“应用程序错误”,“C++错误之类的窗口”,“程序无响应”,“假死”等,下图就是一个IE应用程序错误的示例图片:
2012-02-12_011715-0.jpg
这种崩溃现象的特点是:
程序已经异常,在你未点击出错窗口的确定或其他按钮时,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知道怎样操作可以让程序崩溃,也可以用守株待兔的抓取方法去抓Dump问文件。
推荐使用抓取方法三,因为这个抓取方法可以在你看到错误时就第一时间抓取到Dump,只要出现问题时,叫人保留这个出错窗口,然后你去抓就行了。当然如果你未能及时抓取到这个Dump的话,也可以用其他方法。

第二种崩溃:程序在运行中的时候,窗口或进程突然消失,没有任何错误窗体。
典型的现象就是IE自动关闭,比如你连续打开几个IE窗口,关闭其中任意一个窗口时,所有IE窗口都消失了。或者玩着玩着游戏,游戏界面自动消失等。
这种崩溃现象的特点是:
程序是自动崩溃的,当程序崩溃后,所有错误信息就都消失了,如果你要抓取这种崩溃的Dump,就必须先设置好抓取环境,否则是无法抓取到Dump文件的,因此,这种现象用方法一,方法二,方法四都可以,因为方法三是要有报错界面才抓的了,所以方法三不适用于这种现象。

这就是目前最常见的两种程序崩溃现象,接下来和大家分享下程序Dump的方法。

抓取方法一:
该方法特点:
1、必须指定要抓取的进程或PID,同时程序必须已经在运行,否则无法抓Dump。
2、必须在出现问题之前,先布置好抓取环境。
3、正常关闭进程也会出现Dump文件,因此需要确定抓到的Dump是在程序崩溃时生成的。
第一步:下载需要使用的工具:
WinDbg:该工具是抓取Dump的主角。
工具下载1:http://115.com/file/an94sp48
工具下载2:6.12.0002.633 x86:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi
6.12.0002.633 amd64:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

第二步:设置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:该工具是抓取Dump的主角。
工具下载1:http://115.com/file/an94sp48
工具下载2:6.12.0002.633 x86:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi
6.12.0002.633 amd64:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

第二步:设置WinDbg抓取环境。
将本站提供的WinDbg解压到任意盘符,例如C盘,使用下面的参数抓取Dump。

C:\WinDbg\Windbg.exe -I

2012-02-12_011715-1.png
运行该参数时,WinDbg会弹出一个提示,点击确定后WinDbg界面会消失,如下图:
此时就代表环境已经设置好,现在就需要你想方设法让程序崩溃,比如让IE崩溃。
2012-02-12_011715-2.png
WinDbg参数说明:
-I:将WinDbg作为默认的调试工具,注意I必须为大写,小写无效。

第三步:收集Dump文件。
在程序崩溃时,WinDbg窗口再次弹出来时,使用以下命令保存Dump文件。

.dump -ma d:\test.dmp

如下图:
2012-02-12_011715-3.png
当开始保存Dump文件时,左下角的状态信息会变成*Busy*,表示WinDbg正在工作,Dump保存完成后会出现“Dump successfully written”这个提示,如下图:
2012-02-12_011715-4.png
接下来就是等Dump保存好,然后把dump文件打包提供给软件官方即可。

抓取方法三:
该方法特点:
1、可以在程序报错后,直接抓取Dump文件,不需要额外设置,适用于突然发现报错,且不确定能否复现问题时抓取Dump,这是一个非常重要的抓取方法,强烈建议大家记住。
第一步:下载需要使用的工具:
ProcessExplorer:该工具是用于定位报错窗口的进程PID。
工具下载:http://www.clxp.net.cn/mytool/index/System_analysis_Tools/在军火库中找到ProcessExplorer即可。
WinDbg:该工具是抓取Dump的主角。
工具下载1:http://115.com/file/an94sp48
工具下载2:6.12.0002.633 x86:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi
6.12.0002.633 amd64:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

第二步:使用ProcessExplorer报错窗口所属的进程PID(什么是PID请见文章尾部)
先运行ProcessExplorer,然后鼠标左键按住界面上的瞄准镜图标,然后拖动到报错的窗口上松开鼠标,如图:
2012-02-12_011715-5.png
此时,ProcessExplorer会自动定位到出错的进程上面,然后记住出错进程的PID,例如下图中QQ.exe的PID就是2960。
2012-02-12_011715-6.png

第三步:运行WinDbg,抓取Dump文件。
运行WinDbg后,依次点击“File”=》“Attach to a Process”,如下图:
2012-02-12_011715-7.png

在弹出的界面中,找到刚才捕捉到的PID,然后点OK。
2012-02-12_011715-8.png

点完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,就可以看到了。

转载自:http://www.clxp.net.cn/article/2086.html

转载于:https://www.cnblogs.com/youngboyx/p/3529433.html

使用Windbg分析dump文件定位软件异常的方法! 1、前言 Windbg是微软开发的在Windows平台下强大的用户态和内核态调试工具,是Windows系统排查软件异常的一大利器,使用Windbg能极大的提高我们排查问题的效率,Windbg可以快速分析出软件崩溃、死循环、死锁等多种异常。 很多时候,如果仅仅通过排查代码或者添加打印去排查软件的异常崩溃,效率会很低,特别是代码量比较大的大项目,查起来会更加费劲。并且有些软件异常不是必现的或很难复现的,更不利于问题的排查。我们可以在工程代码中引入谷歌的CrashReport库,给软件安装异常捕获机制,当 阅读详情

相关推荐

Windbg分析dmp时没有明确提示代码位置时的处理

第一种情况 在用windbg打开dmp文件时会出现: 1、运行!analyze -v提示以下内容 0:124> !analyze -v ******************************************************************************* * * *

过好每一天的女胖子 2393

调试技巧 —— 如何利用windbg + dump + map分析程序异常

之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的!  如果光要是这个内存地址,估计你会疯掉~~ 所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0, 下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下: MiniDump.h MiniDump.cpp 1、在CXXDlg::OnIni

wangluozhangleilei的专栏 1万+

WinDbg分析x86崩溃转储:超详细版符号加载与调用栈解读

深入讲解如何使用WinDbg分析x86平台的崩溃转储文件,重点解析符号文件加载机制与调用栈还原过程,帮助开发者快速定位程序崩溃根源。掌握WinDbg调试技巧对排查复杂内存问题至关重要。

weixin_31419153的博客 741

windbg蓝屏dmp文件分析

MSDN蓝屏代码查看:Bug Check Code Reference WinDbg官方下载: https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit windbg 更详细请看 蓝屏dump分析教程,附分析工具WinDbg(x86 x64)6.12.0002.633下载 目前,Microsof

Greless的后花园 7251

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

Windbg抓取程序崩溃的dmp文件的方法   一、        简介 windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据。 我们使用windbg的主要用途是来抓取IE崩溃产生的dmp文件,然后可...

weixin_34364071的博客 837

WinDbg抓取程序报错dump文件的三种方法

程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点:程序已异常,在你未点出错窗口的确定或其他按,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知道 怎么样操作可以让程序崩溃,也可以用守株待兔的抓取方法抓Dump文件...

奔涌的后浪的专栏 2285

使用WinDbg抓取程序报错Dump文件

使用WinDbg抓取程序报错Dump文件,例如抓取IE崩溃Dump,教程 前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg抓取程序崩溃Dump。不过还是先来段废话,为什么要学抓Dump?有啥用?因为有了Dump后,我们可以很迅速的解决问题,比如说IE崩溃,QQ崩溃,很多时候我们是一点头绪都没有的,但是有了WinDbg后,这一切将变的简单!虽然WinDbg

baidy的专栏 2999

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

windbg 捕捉崩溃 崩溃捕捉

yanghongche的专栏 2244

使用windb抓去dump文件

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33882452的博客 558

WinDbg使用教程!!

第一种崩溃程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭。   例如“应用程序错误”,“C++错误之类的窗口”,“程序无响应”,“假死”等,下图就是一个IE应用程序错误的示例图片: 这种崩溃现象的特点是:   程序已经异常,在你未点击出错窗口的确定或其他按钮时,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知...

weixin_34179968的博客 474

程序崩溃APPcrash的问题

小编今天对接扫码枪遇到了一个问题,特在此总结一下:

滕柳 4万+

生产服务器怎么dmp堆栈信息,如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈...

Windbg.exe,打开进程的.dmp 文件。请确保您符号路径指向正确的位置。 有关如何执行此操作,请访问下面的 Microsoft Web 站点:如何获得符号http://www.microsoft.com/whdc/devtools/ddk/default.mspx (http://www.microsoft.com/whdc/devtools/ddk/default.mspx)在命令提...

weixin_39816946的博客 448

操作系统崩溃时minidump文件的创建流程完整指南

当系统频繁蓝屏,Windows会自动生成minidump文件——一种轻量级内存快照,记录崩溃瞬间的关键内核信息。它体积小、生成快,是定位驱动冲突或内存错误的首要线索。掌握minidump是什么文件,能帮你快速读懂蓝屏根源,避免盲目重装系统。

weixin_35578748的博客 264

和我一起作Tess的windbg lab - Lab5, Crash

原文地址:http://blogs.msdn.com/b/tess/archive/2008/03/05/net-debugging-demos-lab-5-crash.aspx 操作步骤: 1、运行CompanyInformation.aspx 2、在输入框中输入一个字符串,如aaa,点Send按钮 3、等了几秒钟,IE报错:无法显示网页 4、抓一个crash的dump,加载SOS,看...

weixin_33881041的博客 123
aldatv3086
博客等级 码龄10年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值