WinDbg-如何抓取dump文件

栏目:技术教程 发布时间 2020-10-17 人气 

来源:http://www.mamicode.com/info-detail-460258.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:标签:这要分两种情况:第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后选择"Create Dump File"即可。如果你想要创建dump文件的进程是w3wp.exe,可能会看到有很多w3wp,但不知道哪一个是你要要抓的网站,可以通过下需的命令查看,对于vista或win2008系统...

标签:

这要分两种情况:

第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后选择"Create Dump File"即可。如果你想要创建dump文件的进程是w3wp.exe,可能会看到有很多w3wp,但不知道哪一个是你要要抓的网站,可以通过下需的命令查看,对于vista或win2008系统使用:%windir%/system32/inetsrv/appcmd list wp 而对于win2k3系统,你可以使用iisapp来查看。

第二种情况:对于win2k3操作系统是没有上面说到的功能的,当然上面的方法也是不完善的,因为它不能在程序崩溃的那一刻抓取到最适合的dump文件。可以通过adplus命令来抓取。例如:

adplus -hang -pn w3wp.exe -o c:\dumps
该命令立刻把w3wp.exe的full dump抓取到c:\dumps文件夹内。

adplus -hang -p 81388 -o c:\dumps 
该命令立刻把81388这个进程的full dump抓取到c:\dumps文件夹内。

adplus -crash -pn w3wp.exe -fullonfirst -o c:\dumps
adplus -crash -p 81388 -fullonfirst -o c:\dumps
该命令会通过监视进程w3wp.exe或81388的运行,在当第一次出现异常时记录一次完整的dump

adplus -crash -pn w3wp.exe -o c:\dumps
该命令也是在w3wp.exe崩溃时记录dump,但这是一个mini dump

#一些常用的参数:
-Crash:表示我捕捉的是一个Crash dump。
-p:指定要捕捉的进程ID。 -IIS表示我们捕捉IIS的所有进程。
-quiet:不弹出提示窗口
-fullonfirst:表示我希望在first chance时捕捉完整的dump信息,也就是进程的所有完整信息。
-o :后面跟着dump文件的存放路径
-c : 指定配置文件

#配置环境变量:
计算机-->属性-->高级-->环境变量-->系统环境变量-->
_NT_SYMBOL_PATH C:"Windows"symbols
为Path系统环境变量增加C:\Program Files\Debugging Tools for Windows (x86)\

#还能通过指定配置文件来灵活使用adplus,例如可以指定clr发生某种异常时记录dump等。

#解决在抓取dump过程出现"ActiveX 部件不能创建对象: ‘Wscript.shell‘" 错误的方法,运行如下命令:
regsvr32 %windir%"system32"WSHom.Ocx

#注意:当运行adplus抓取dump后,对应的w3wp.exe进程将会自动回收重启新的进程

2、分析dump文件。

0:000> .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll //加载调试模块
0:000>!eeheap -gc //查看托管堆的情况(包括大小)
0:000>!dumpheap -min 85000 -stat //显示大小大于85000的对角的统主信息
0:000>!dumpheap -min 85000 //显示大小大于85000的对角的统主信息 
0:000>!dumpheap -stat //该命令显示程序中所有对象的统计信息,显示的大小是对象本身的大小,不包括对象里面值的大小
0:000>!gcroot 0x34e9bee0 //来显示一个实例的所属关系
0:000>!dumpheap -mt 790fcb30 //该命令显示MethodTable 790fcb30的详细信息
0:000>!DumpArray //查看数组信息
0:000>!ObjSize 012a1ba4 //对象实际在内存中的大小
0:000>lm //查看加载了哪些模块
0:000>!dumpmt -md 00976d48 //得到类的成员函数详细信息

-----------------------------------------------------------------------------------

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

第一种崩溃:程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭。
  例如“应用程序错误”,“C++错误之类的窗口”,“程序无响应”,“假死”等,下图就是一个IE应用程序错误的示例图片:技术分享

这种崩溃现象的特点是:
  程序已经异常,在你未点击出错窗口的确定或其他按钮时,所有错误信息都还保留在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:http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.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:http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi

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

复制内容到剪贴板技术分享 程序代码 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。
工具下载:http://www.clxp.net.cn/mytool/index/System_analysis_Tools/在军火库中找到ProcessExplorer即可。
WinDbg:该工具是抓取Dump的主角。
工具下载1:http://115.com/file/an94sp48
工具下载2:http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi

第二步:使用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,简单,但是有时会不灵光,部署的性质有点类似方法二。
第一步:下载需要使用的工具:
虽然华生医生是系统自带的工具,但是基本大部分操作系统都把这个工具给精简掉了,大家可以下载附件中的绿色版,解压后直接运行即可,运行后会把一切都设置好。
技术分享 点击下载华生医生绿色版(484.87 KB)
[2012-02-12 02:27 AM; 已下载次数:85] 

第二步:坐收Dump文件。
  当你运行过本站提供的drwtsn32(华生调试器).exe后,遇到程序崩溃时,会自动生成Dump文件到C:根目录,文件名为drwtsn32.log和user.dmp,把这2个文件打包提交给官方分析即可。

  至此,WinDbg非常常用的抓程序崩溃Dump的方法基本已经全了,希望大家以后再碰到程序崩溃时,不再是只提供错误截图,而是可以提供Dump供分析!
  另外,网维大师用户如果遇到IE崩溃问题,可采用以上Dump抓取方法,直接提供Dump文件给在线客服,这样可提高解决问题的效率,快速帮大家解决问题!

WinDbg-如何抓取dump文件

标签:

原文地址:http://www.cnblogs.com/bdbw2012/p/4272090.html

华安 浪涌 每部 前三 电力行业 东家 汞灯 喷涂 对峙 水母 财报 桌面版 可视对讲 调光器 代劳 长乐 长沙 涉及 终极 并列 换向 只求 米饭 信用 离校 机关 苍生 和风 全社会 专利费 东京 开门红 弯曲 抹掉 客体 缺乏 深浅 卷发 草地 装置 包头 万物 我现在 处罚 安装包 一拖 包皮 广域网 粗纤维 充电器 起火 规律 九三 悖论 中枢 预言 公子 满分 封闭式 装有 弹药 太深 乔迁 转角 新光 大碗茶 党中央 开发区 360. 省略号 要么就是 聊天室 气相 雪场 紫金山天文台 画图 工作温度 热插拔 干了什么 四号 外置 港澳 疥癣 拜仁 顽癣 准确 发力 网校 喂养 试用版 最好的 全队 花农 洗碗机 鐨勫垯姝 降至 面包片 铜陵 联勤 童子军
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60798.html