你需要知道的 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使用 下载地址: https://docs.microsoft.com/en-us/sysinternals/downloads/procdump 抓取的代码: pr ...
- 介绍一个好用的抓取dump的工具-ProcDump
Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原 ...
- web开发程序员有几种_每个程序员都应该知道的10种流行的Web开发工具
web开发程序员有几种 Are you planning to get into web development? Take a tool with you, it's scary out there ...
- 物联网产品:你需要知道的9种智能家居产品
前NASA科研人员:你需要知道的9种智能家居产品 width="22" height="16" src="http://hits.sinajs. ...
- Hibernate 原汁原味的四种抓取策略(转)
原文出处:http://www.cnblogs.com/rongxh7/archive/2010/05/12/1733088.html 尊重原作者,访问原创地址 最近在研究 Hibernate ...
- android电视打开ppt,很少人知道的3种智能电视演示PPT的方法
原标题:很少人知道的3种智能电视演示PPT的方法 演示PPT,通常是在投影上,但随着大屏智能电视的火热和普及,越来越多的办公室以大屏智能电视取代投影,成为办公室不可或缺的生产力.今天就以60吋酷开K6 ...
- 与员工沟通 你需要知道的6种聊天姿势
与员工沟通 你需要知道的6种聊天姿势! 回顾中国企业的管理文化,上司与下属的沟通开场通常利用"封闭式问题"与"为什么式问题"这两种模式,第一种类问题下属的回答有 ...
- 2020年最佳的5种社交媒体的数据抓取/网络爬虫工具
2020年最佳的5种社交媒体的数据抓取/网络爬虫工具 查看原文章: 2020年最佳的5种社交媒体的网络爬虫工具 社交媒体数据抓取工具通常是指一种自动化网络爬虫工具,可从社交媒体渠道提取数据.它不仅包括 ...
- 如何手工抓取dump文件及分析
在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试. 首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需 ...
最新文章
- 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
- 连连看路径求解的算法
- xen networking(2)
- 一个项目的整个测试流程
- springboot中获取bean_最新Spring Boot干货总结(超详细,建议收藏)
- redhat下的iptables和firewalld 笔记
- 使用JFreeChart实现基于Web的柱状图
- 我的RHCE考试终于要开始了!
- Javascript第四章函数function也是数据类型第六课
- python爬虫解决极验验证码问题
- win7系统安装卡在启动服务器,安装win7卡在启动界面不动进不了BIOS的解决方法 - 系统家园...
- 22_多点电容触摸屏驱动
- wps-excel的自动分页符(虚线)怎么去掉
- PCB治具设计、制造和管理
- hibernate完整jar包下载
- java 时间戳 什么意思_java时间与时间戳
- OGRE渲染引擎之地形、天空和雾
- 世界上最大的计算机硬盘,全球我最大 忆捷A600 2TB移动硬盘评测
- Windows-Oracle 11g详细安装教程
- 夜幕归宿见闻有感(格式修改版)
热门文章
- go1.57安装框架iris12.1遇到的坑及解决
- Swift SnapKit布局注意事项
- MPEG vs JPEG
- Spring Cloud Alibaba系列四:集成 seata 实现分布式事务
- MSSQLSERVER 与 SqlExpress
- What can neural networks reason about?论文解析
- python实现飞行控制仿真(二)——三自由度仿真
- spotify怎么设置头像_如何使Spotify停止发布到Facebook(和其他隐私设置)
- 时光金科php,重庆金科博翠宸章 | ACA麦垦景观
- 剪贴板 Clipbardjs 的使用教程,Vue