WinDbg-如何抓取dump文件

这要分两种情况:

第一种情况:如果是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文件给在线客服,这样可提高解决问题的效率,快速帮大家解决问题!

时间: 2024-08-28 13:32:43

WinDbg-如何抓取dump文件的相关文章

抓取dump

1,在程序奔溃前部署.adplus.exe -crash -pn explorer.exe -o d: -crash:当进程挂掉的时候抓取dump,只能抓取到进程报错时的信息,如果进程不报错,就无法抓取到dump-hang:当开启windbugu之后就开始抓取dump,主要用于抓取进程异常,如进程未崩溃的情况,例如进程占用cpu 100% -pn:进程的PID或进程名,如果是进程名,会区分大小写-o: dump的输出路径 FULLDUMP_SecondChance_ch_InvalidHandl

IIS崩溃时自动抓取Dump

背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error Reporting Service 服务 2.移除默认的调试器 如果你的机器装了VS开发工具,会在注册表里写入调试器地址,需要把它删除. 找到注册表删除以下2个项目HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDeb

.net core 抓取dump包

1. https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-dump-instructions.md 在Linux上,运行时版本必须为3.0或更高,windows 无限制.使用 dotnet-dump collect 命令收集需要程序为3.0才行,而使用 dotnet-du

Google去抓取同一文件的流量就超过了700Mbps。DDOS爬虫攻击

只需要使用一台笔记本,打开几个web标签页,仅仅拷贝一些指向10MB文件的链接,Google去抓取同一文件的流量就超过了700Mbps. Google的FeedFetcher爬虫会将spreadsheet的=image("link")中的任意链接缓存. 如果我们将=image("http://example.com/image.jpg")输入到任意一个Google spreadsheet中,Google就会"派出"FeedFetcher爬虫去抓取

WinDbg抓取dmp文件

应用程序发生异常时抓取dmp: adplus.vbs -crash -pn w3wp.exe -y srv*c:\symbols*http://msdl.microsoft.com/download/symbols 关于w3wp进程抓取不到dump文件,可参考: http://blogs.msdn.com/b/stuartleeks/archive/2009/07/22/adplus-windows-7-and-asp-net.aspx 对adplus.vbs作如下修改: if g_Curren

高通平台抓取ramdump文件

准备版本文件 准备一个具有root权限的版本,该版本需要保留symbols文件夹 将版本刷入手机中,并开机正常. 刷入debugpolicy 将手机连接到Ubuntu电脑上,确定adb可以正常获取设备 执行代码中的 python vendor/xiaomi/securebootsigner/Qualcomm/tools/debugpolicy.py 执行脚本完成后,手机会自动重启 开启手机的download模式 待手机重启完毕后,执行如下的命令(注意:每次重新启动手机后,都需要执行该操作) ad

下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片

将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 #region 图片下载[使用流.WebRequest进行保存] 4 /// <summary> 5 /// 图片下载[使用流.WebRequest进行保存] 6 /// </summary> 7 /// <param name="fileUrl">图片URL地址(例如:http://img.baidu.com/video/img/video

python抓取m3u8文件,并提取.ts文件合成视频

本节抓取手机app视频,charles抓包部分就不演示了,抓包内容如下: 可以直接抓取到.ts视频文件,但全都是视频片段,如果要抓全部的视频,就要找m3u8文件,里边有所有的视频路径,在拼接url前缀,就可以拿到正确的视频url了. 以下是代码部分: import requests import os,sys import re #读取m3u8文件并提取.ts文件路径 url="http://f1.thishs.com/578a7600fb83e8566227a90f3bd926b4/5E64C

adplus 抓取dump

工具所在路径   C:\Program Files\Windows Kits\10\Debuggers\x64 cmd窗口切换目录倒adplus所在路径下,输入抓取命令.adplus -hang -pn w3wp.exe -quiet -o d:\dumps Microsoft Windows [版本 10.0.10240](c) 2015 Microsoft Corporation. All rights reserved. C:\Users\WXH-NOTE>c: C:\Users\WXH-