你需要知道的 N 种抓取 dump 的工具
前言
今天,向大家介绍几种可以抓取应用程序转储文件的工具及基本使用方法。更详细的用法,请参考每个工具对应的帮助文档。如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 —— 转储文件知多少。
各种抓取转储文件的工具
有很多工具都可以抓取转储文件。我列举几个常用的工具并简单介绍使用方法。
任务管理器
任务管理器是唾手可得的抓取转储文件的工具。按住
Ctrl + Shift + Esc即可打开。打开任务管理器后,在需要转储的进程上右键->创建转储文件(C),即可自动保存转储文件到%tmp%目录下。
提示: 创建成功后,会弹出对话框提示转储文件保存的位置。一般保存在系统临时目录下。在文件管理器地址栏输入
%temp%即可快速打开临时目录,对%appdata%等其它目录同样有效。
process explorer
process explorer比系统自带的资源管理器更强大,之前写过一篇文章介绍怎么使用 process explorer 替换系统自带的资源管理器的文章。感兴趣的小伙伴儿可以看一看。打开process explorer,在需要转储的进程上,右键->Create Dump->Create Full Dump...就可以保存转储文件了。(Create Minidump...抓取的信息少,但抓取的转储文件小,适合网络传输,请根据自己的需要选择)
visual studio
visual studio简称vs,大家应该对vs应该非常熟悉了,我就不多介绍了。打开vs,附加到需要转储的进程上,点击Break All按钮(或者按快捷键Ctrl + Alt + Break)暂停目标进程。然后点击Debug->Save Dump As...就可以保存转储文件了。如果不暂停目标进程,Save Dump As...按钮是置灰的。
{%note info%}
提示: 可以使用 Ctrl + Alt + P 快速打开 Attach to Process 界面,选择要附加的进程。
{%endnote%}
windbg
windbg是windows系统上非常强大的调试器,基本上我只用windbg分析转储文件。能分析转储文件,当然能保存转储文件了。打开windbg,附加到需要转储的进程上,执行.dump [Options] path/to/save/dump.dmp
可以使用
.hh .dump查看.dump命令的帮助文档。其中的/m[MiniOptions]会直接影响生成的转储文件的内容和尺寸。我们有必要了解每个选项的意义。因为我实在是太懒了,就贴一张MSDN上的截图吧。

{%note info%}
注意:
最好用 32 位的 windbg 附加到 32 位进程中,64位的 windbg 附加到 64 位进程中。如果用 64 位的 windbg 附加到 32 位进程后,直接执行.dump 命令生成的转储文件会 “有问题”。
{%endnote%}
procdump
终于,要介绍我最喜欢的
procdump了。procdump是我用过的最好用的抓取转储文件的工具了。强烈建议你也试试。这里只简单介绍一些基本用法,因为用法实在是太多了,要完整介绍的话恐怕单独写一篇文章都介绍不完,而且很多高级用法我也不熟悉,都是用到了再去查帮助文档。如果你想了解更多高级用法,请参考官方文档 或《Windows Sysinternals 实战指南》中介绍procdump的章节。
直接运行
procdump查看用法。
运行
procdump -? -e查看使用范例。
为指定进程
ID的进程生成转储文件。procdump [-mp] process_id [path/to/save/dump]为指定进程名的进程生成转储文件(注意:如果系统中存在多个名为
process_name的进程,会报错)procdump [-mp] process_name [path/to/save/dump]-x选项,启动一个新进程并监视。启动的进程退出就保存转储文件。
procdump -x path/to/save/dump process_to_start process_parameters启动的进程有异常的时候才保存转储文件。
procdump -e -x path/to/save/dump process_to_start process_parameters{%note info%}
注意:
-x选项必须在最后。-x后面必须跟着转储文件的保存路径。
{%endnote%}-w选项,等待进程启动。w是wait的缩写。需要与其它命令配合使用。-h选项,监控进程的挂起状态。h是hang的缩写。-e选项,监控进程的异常状态。e是exception的缩写。-t选项,在进程终止时创建转储文件。t是terminate的缩写。一般情况下,我们只关心进程异常退出的情况,但有时候我们也关心进程正常退出的情况。这时候我们可以使用此选项,在进程退出的时候生成转储文件。不论进程是被强制终止的,还是由于异常退出的,还是正常退出的,统统没问题。
监视进程的运行状态并在进程发生异常的时候生成
dump。可以与-w选项一起使用。procdump [option] -e [-w] process_name or process_id [path/to/save/dump]监视进程的运行状态并在进程挂起的时候生成
dump。可以与-w选项一起使用。procdump [option] -h [-w] process_name or process_id [path/to/save/dump]监视进程的运行状态,不论是否发生异常,只要进程退出就创建转储文件。
{%note info%}
注意: 因为 -w 是用来等待尚未启动的进程的,所以不能与process_id一起使用。没启动的进程当然没有进程ID了。如果在一起使用,会报如下错误:The wait option requires the process be specified by name.
{%endnote%}
每隔
5秒保存一次转储文件,一共保存3次。procdump -s 5 -n 3 process_name or process_id [path/to/save/dump]当进程
CPU 占用率高于%10,并持续2s的时候生成转储文件,最多生成10个。procdump -s 2 -n 10 -c 10 process_name or process_id [path/to/save/dump]dump文件名生成规则如果我们没指定转储文件的名字,
procdump会根据PROCESSNAME_YYMMDD_HHMMSS的规则生成。相信,细心的小伙伴已经从录屏里看出来了。这样我们就不用担心之前生成的转储文件被覆盖了。-mp选项使用该选项可以大大的降低转储文件的大小。强烈建议启用此选项。具体工作原理,请参考《Windows Sysinternals 实战指南》。

安装
procdump为事后调试器(postmortem debugger),或者叫JIT调试器 (Just In Time Debugger)。以管理员权限运行
procdump -i可以注册procdump为事后调试器。注册的时候可以指定转储文件保存的路径,及转储选项。例如,procdump -mp -i e:\dumps\。以管理员权限运行
procdump -u可以解除注册。{%note info%}
提示: 以管理员权限运行windbg -I可以设置windbg为事后调试器。注意:是大写的I,不是小写的i。后面会专门写一篇文章介绍Just In Time Debug相关的内容。
{%endnote%}- Much Much More ...
{%note info%}
说明:
procdump官方文档中的Learn More一节中有Defrag Tools上的视频链接,非常值得一看。
procdump的作者是Mark Russinovich和Andrew Richards。Andrew Richards是Defrag Tools的主持人之一。
{%endnote%}这里是一份使用
procdump的录屏,展示了上面介绍的几种用法,感兴趣的小伙伴可以看看。
其它工具
讲道理,只要是调试器就应该提供保存转储文件的功能。比如,
cdb,ntsd,令我感到意外的是x64dbg和ollydbg居然没有保存转储文件的功能?不过,这不影响这两个调试器的伟大!如果你自己写调试器的话,请一定要加上保存转储文件的功能。除了上文种提到的各种工具和调试器外,还有很多其它工具也可以保存转储文件。比如,DebugDia,AdPlus,gflags等。如果对哪个工具感兴趣,请自行研究。
总结
- 有很多优秀的工具可以帮我们抓取转储文件,我认为最好用的非
procdump莫属。 JIT Debug非常有用,可以让我们在进程异常退出时收到通知,并做相应的处理。
参考资料
- 《软件调试》
- 《Windows Sysinternals 实战指南》
- Microsoft Document : .dump (Create Dump File)
- procdump
你需要知道的 N 种抓取 dump 的工具的更多相关文章
- 转:介绍一个好用的抓取dump的工具-ProcDump
介绍一个好用的抓取dump的工具-ProcDump Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash ...
- 好用的抓取dump的工具-ProcDump
Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原 ...
- 【转】Hibernate 原汁原味的四种抓取策略
最近在研究 Hibernate 的性能优化的时候碰到了"抓取策略", 由于以前没有详细的研究过, 所以到处找资料, 但是无论从一些讲 Hibernate 书籍,还是他人 Blog ...
- Hibernate 原汁原味的四种抓取策略(转)
原文出处:http://www.cnblogs.com/rongxh7/archive/2010/05/12/1733088.html 尊重原作者,访问原创地址 最近在研究 Hibernate ...
- 每个IT安全专业人员应该知道的12种根本漏洞
每个IT安全专业人员应该知道的12种根本漏洞 每年,IT安全专业人员都面临着数千个新的软件漏洞和数百万个不同的恶意软件程序,但只有12种根本漏洞会让这些软件漏洞和恶意软件程序攻击你的设备.了解这些根本 ...
- 抓取dump
1,在程序奔溃前部署.adplus.exe -crash -pn explorer.exe -o d: -crash:当进程挂掉的时候抓取dump,只能抓取到进程报错时的信息,如果进程不报错,就无法抓 ...
- WinDbg-如何抓取dump文件
这要分两种情况:第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后 ...
- 使用ProcDump工具抓取dump
首先得到要抓取的进程号 cd %windir%\syswow64\inetsrvappcmd list wp得到pid之后, 在任务管理器里发现w3wp.exe的CPU总在49%-60%左右, 间歇性 ...
- IIS崩溃时自动抓取Dump
背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...
随机推荐
- 3.2Adding custom methods to mappers(在映射器中添加自定义方法)
3.2Adding custom methods to mappers(在映射器中添加自定义方法) 有些情况下,我们需要实现一些MapStruct无法直接自动生成的复杂类型间映射.一种方式是复用其他已 ...
- Apache服务器多站点配置
Apache多站点设置,主要是关于httpd.conf配置文件的设置. 在httpd.conf配置文件中最后面的<VirtualHost>标签 #<VirtualHost *:80& ...
- SPOJ DQUERY D-query 离线+树状数组
本来是想找个主席树的题目来练一下的,这个题目虽说可以用主席树做,但是用这个方法感觉更加叼炸天 第一次做这种离线方法,所谓离线,就在把所有询问先存贮起来,预处理之后再一个一个操作 像这个题目,每个操作要 ...
- 【Android】家庭记账本手机版开发报告一
一.说在前面 昨天 学习了数据库的一些简单操作 今天 使用数据库,完成对记账本的账单记录的增删 问题 没有 二.数据库 1.账单表的结构 (注 id:账单的唯一标识,uid:记录账单的用户的id,co ...
- css设置兄弟节点的样式(相邻的前一个节点)
产品需求:想在鼠标移动到“移除”的时候,“1.产品匹配测试”添加下划线和更改字体颜色 需求分析:从需求可以看出使用 :hover 就可以解决的问题,但是在实践中发现兄弟选择器(+)不好使,(+)只能是 ...
- 考研c语言基础 66++6
1.数据类型 对于基本的数据类型,如整型int,long,...(考研中涉及处理的整数题目,如果没有特别要求用int足够了),字符型char,浮点型float.double...(对于处理小数问题,在 ...
- comparable and comparator 比较
转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...
- 一、VIP课程:互联网工程专题 01-Git基本概念与核心命令掌握
第一课:Git基本概念与核心命令掌握.docx 课程概要: GIT 体系概述 GIT 核心命令使用 GIT 底层原理 一.GIT体系概述 1.使用方式区别 从本地把文件推送远程服务,SVN只需要com ...
- ETL工具对比
ETL工具对比 Informatica Kettle 起源 1993年创立于 (美国加利福尼亚州)并于1999年4月在纳斯达克上市 2006年加入了开源BI组织 自2017年9月起,已被(日立集团下 ...
- Day 7:TreeSet
补充上一日:HashCode方法默认返回的是内存地址,String类已经重写了对象的HashCode方法 方法细节:取出数组中的值或字符串的值按照规定计算返回一个值,如果两个字符串内容一致就会返回相同 ...






