Windbg和ADPlus抓Dump
时间:2010-09-05 来源:DylanWind
Feature | ADPlus | Dr. Watson | WinDbg | UserDump |
Creating a dump file when an application crashes (postmortem debugging) | Yes | Yes | Yes | Yes |
Creating a dump file when an application "hangs" (stops responding but does not actually crash) | Yes | No | Yes | Yes |
Creating a dump file when an application encounters an exception | Yes | Yes | Yes | Yes |
Creating a dump file while an application is running normally | No | No | Yes | No |
Creating a dump file from an application that fails during startup | No | No | Yes | Yes |
Shrinking an existing dump file | No | No | Yes | No |
Windbg .dump 命令: .dump [Options] <File Name>
Options 表示有很多选项,比如 / o 表示可以重写 (overwrites) 一个已经存在的dump文件并使用相同的文件名。/f表示有2层意思:如果在内核模式,将创建一个完整的Kernel-Model dump 文件。该文件包含所有出错时的内存信息。要注意的是,这样的话dump文件会很大。另一层的意思是如果在用户模式下,将创建包含进程所占的内存大小,程序执行的情况,以及相应的处理和一些有用的其它信息。还有/m[options],该命令是创建一个小的内存dump文件(内核模式下)或者一个minidump(用户模式下)。这样创建出来的dump文件体积小,又包含有用的信息。如果配合相应的选项,创建出来的dump文件可以说是“短小精悍“了!下面给个事例:
.dump /mf c:\example_dump.dmp
该命令的意思是创建一个mini dump 在c:\盘下,并且命名为example_dump,该文件的后缀名是.dmp。不同的是,在该文件中,添加了所有目标程序可访问的(内存)页面信息在里面。这样更方便调试。
抓取的时机:
实际上,察看dump文件是个很浩大的工程,也和枯燥。所以,抓取一个比较精确的dump文件是比较好的。
上面说到了2种dump文件:full dump 和 mini dump。
Full dump 很大,包含的信息多,创建时候相对省力,只需要在debugger中断的时候用下.dump命令就可以了。Mini dump需要找到异常第一次发生的地方,这其中,还有许多异常是程序预期的 ,也就是说,你需要有判断该异常是不是导致程序中断的最终原因的能力。
什么是ADPlus?
===============
ADPlus是一个Microsoft Product Support Services (PSS) 的工具, 可以用来排查任何进程或者应用程序的停止响应(hang), 或者崩溃(crash)的错误.
ADPlus有哪些功能?
===============
ADPlus 是基于控制台的 Microsoft Visual Basic 脚本。
它使 Microsoft CDB 调试程序自动生成包含来自一个或多个进程的调试输出的内存转储和日志文件。
每当 ADPlus 运行时,调试信息(包含调试信息的内存转储和文本文件)都将放置在本地文件系统或远程网络共享目录上的新的、唯一命名的文件夹(例如,C:\Temp \Crash_Mode__Date_01-22-2001__Time_09-41-08AM)中。
到哪里下载ADPlus?
================
ADPlus 随最新的 Microsoft Debugging Tools for Windows 一起提供。
ADPlus是如何工作的?
================
ADPlus 具有两种操作模式:
- “Hang”模式用于解决进程挂起、100% CPU 使用率以及不涉及崩溃的其他问题。当您在挂起模式下使用 ADPlus 时,在运行脚本之前必须等待,直到进程停止响应(与崩溃模式不同,挂起模式不是持久性的)。
- “Crash”模式用于解决 Dr. Watson 错误导致的崩溃问题,或者用于解决导致程序或服务意外退出的任何其他类型的错误。当您在崩溃模式下使用 ADPlus 时,必须在发生崩溃前启动 ADPlus。可以通过“-notify”开关对 ADPlus 进行配置,以便通知管理员或计算机发生了崩溃。
Hang模式
在此模式下,ADPlus 在脚本结束运行后立即为在命令行中指定的所有进程生成完全内存转储。创建的每一个 .dmp 文件都会放在包含运行 ADPlus 时的日期/时间戳的文件夹中。每一个文件名都包含进程名、进程 ID,以及运行 ADPlus 时的日期/时间戳。在进程内存正被转储到某一文件时,该进程被冻结。在创建完内存转储文件之后,通过将非侵害性连接/分离与 CDB 调试程序一起使用来恢复进程。
Crash模式
在此模式下,ADPlus 将 CDB 调试程序连接到在命令行中指定的所有进程。ADPlus 自动配置调试程序以监视下列类型的异常:
- 无效句柄
- 非法指令
- 整数被零除
- 浮点数被零除
- 整数溢出
- 无效的锁定顺序
- 访问冲突
- 堆栈溢出
- C++ EH 异常
- 未知异常
使用ADPlus的命令举例
====================
为Hang住的情况抓Dump:
adplus -hang -pn w3wp.exe 为所有的w3wp.exe进程创建内存转储文件.
adplus -hang -p 1244 为进程ID为1244的进程创建内存转储文件.
adplus -hang –IIS 为所有跟IIS相关的进程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)创建内存转储文件.
为Crash的情况抓Dump:
adplus -crash -pn w3wp.exe 在崩溃的时候为所有的w3wp.exe进程创建内存转储文件
adplus -crash -p 1244 在进程ID为1244的进程崩溃的时候为它创建内存转储文件
adplus -crash –IIS 为所有跟IIS相关的进程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)创建崩溃时的内存转储文件.