抓取Dump
Dump文件主要是将内存中的内容储存起来的物理文件,根据储存的不同内存段,可以将dump文件分为内核模式dump(Kernel-mode dump)和用户模式dump(User-mode dump),我们主要用到是用户模式dump。
用户模式dump又可以分为完全dump(Full User-Mode Dump)和迷你dump(Minidump),minidump只包含目标进程相关的内存,full dump包含了所有用户空间的内存,同时还包括了虚拟内存,所以minidump远远小于full dump,
我们常用的是迷你dump。
一、任务管理器
在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后选择"创建转储文件"即可
如果想在程序崩溃的那一刻抓取dump文件。可以通过adplus命令来抓
ADPlus 具有两种操作模式:
“Hang”模式用于解决进程挂起、100% CPU 使用率以及不涉及崩溃的其他问题。当您在挂起模式下使用 ADPlus 时,在运行脚本之前必须等待,直到进程停止响应(与崩溃模式不同,挂起模式不是持久性的)。
“Crash”模式用于解决 Dr. Watson 错误导致的崩溃问题,或者用于解决导致程序或服务意外退出的任何其他类型的错误。当您在崩溃模式下使用 ADPlus 时,必须在发生崩溃前启动 ADPlus。可以通过“-notify”开关对 ADPlus 进行配置,以便通知管理员或计算机发生了崩溃。
二、ADPLUS
使用ADPlus的命令举例
-crash:表示我捕捉的是一个Crash dump。
-p:指定要捕捉的进程ID。 -IIS表示我们捕捉IIS的所有进程。
-quiet:不弹出提示窗口
-fullonfirst:表示我希望在first chance时捕捉完整的dump信息,也就是进程的所有完整信息。
-o :后面跟着dump文件的存放路径
-c : 指定配置文件
为Hang住的情况抓Dump:
adplus -hang -pn w3wp.exe -o C:\dumps 为所有的w3wp.exe进程创建dump到C:\dumps
adplus -hang -p 1244 为进程ID为1244的进程创建内存转储文件.
adplus -hang –IIS 为所有跟IIS相关的进程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)创建内存转储文件.
为Crash的情况抓Dump:
adplus -crash -pn -fullonfirst w3wp.exe 在崩溃的时候为所有的w3wp.exe进程创建内存转储文件
adplus -crash -p 8588 -fullonfirst -o d:\dumps 在进程ID为8588 的进程崩溃的时候为它创建内存转储文件
adplus -crash –IIS 为所有跟IIS相关的进程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)创建崩溃时的内存转储文件.
三、Windbg
附加(attach)已经启动的程序,选择好进程, 是windbg输入命令 .dump /ma d:\w3wp.dmp
1、查看进程ID
2、attach进程
3、生成dump文件
选项(1): /m
命令行示例:.dump /m d:\w3wp.dmp
注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。
选项(2): /ma
命令行示例:.dump /ma d:\w3wp.dmp
注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。