原总结注册表debug调试dump转储文件windbgprocdump

前言

今天,向大家介绍几种可以抓取应用程序转储文件的工具及基本使用方法。更详细的用法,请参考每个工具对应的帮助文档。如果你还不清楚什么是转储文件,不知道什么时候需要转储文件,请参考转储文件系列文章的第一篇 —— 转储文件知多少

各种抓取转储文件的工具

有很多工具都可以抓取转储文件。我列举几个常用的工具并简单介绍使用方法。

  1. 任务管理器

    任务管理器是唾手可得的抓取转储文件的工具。按住 Ctrl + Shift + Esc 即可打开。打开任务管理器后,在需要转储的进程上右键 -> 创建转储文件(C),即可自动保存转储文件到 %tmp% 目录下。

    提示: 创建成功后,会弹出对话框提示转储文件保存的位置。一般保存在系统临时目录下。在文件管理器地址栏输入 %temp% 即可快速打开临时目录,对 %appdata% 等其它目录同样有效。

  2. process explorer

    process explorer 比系统自带的资源管理器更强大,之前写过一篇文章介绍怎么使用 process explorer 替换系统自带的资源管理器的文章。感兴趣的小伙伴儿可以看一看。打开 process explorer,在需要转储的进程上,右键 -> Create Dump -> Create Full Dump... 就可以保存转储文件了。( Create Minidump... 抓取的信息少,但抓取的转储文件小,适合网络传输,请根据自己的需要选择)

  3. visual studio

    visual studio 简称 vs,大家应该对 vs 应该非常熟悉了,我就不多介绍了。打开 vs,附加到需要转储的进程上,点击 Break All 按钮(或者按快捷键 Ctrl + Alt + Break)暂停目标进程。然后点击 Debug -> Save Dump As... 就可以保存转储文件了。如果不暂停目标进程,Save Dump As... 按钮是置灰的。

使用 vs 抓取 dump 录屏

{%note info%}
提示: 可以使用 Ctrl + Alt + P 快速打开 Attach to Process 界面,选择要附加的进程。
{%endnote%}

  1. windbg

    windbgwindows系统上非常强大的调试器,基本上我只用 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%}

  1. procdump

    终于,要介绍我最喜欢的 procdump 了。procdump 是我用过的最好用的抓取转储文件的工具了。强烈建议你也试试。这里只简单介绍一些基本用法,因为用法实在是太多了,要完整介绍的话恐怕单独写一篇文章都介绍不完,而且很多高级用法我也不熟悉,都是用到了再去查帮助文档。如果你想了解更多高级用法,请参考官方文档 或《Windows Sysinternals 实战指南》中介绍 procdump 的章节。

  • 直接运行 procdump查看用法。

  • 运行 procdump -? -e 查看使用范例。

procdump 用例
  • 为指定进程 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 选项,等待进程启动。wwait 的缩写。需要与其它命令配合使用。

  • -h 选项,监控进程的挂起状态。hhang 的缩写。

  • -e 选项,监控进程的异常状态。eexception 的缩写。

  • -t 选项,在进程终止时创建转储文件。tterminate 的缩写。

    一般情况下,我们只关心进程异常退出的情况,但有时候我们也关心进程正常退出的情况。这时候我们可以使用此选项,在进程退出的时候生成转储文件。不论进程是被强制终止的,还是由于异常退出的,还是正常退出的,统统没问题。

  • 监视进程的运行状态并在进程发生异常的时候生成 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 RussinovichAndrew RichardsAndrew RichardsDefrag Tools的主持人之一。
    {%endnote%}

    这里是一份使用 procdump 的录屏,展示了上面介绍的几种用法,感兴趣的小伙伴可以看看。

  1. 其它工具

    讲道理,只要是调试器就应该提供保存转储文件的功能。比如, cdb, ntsd,令我感到意外的是 x64dbgollydbg 居然没有保存转储文件的功能?不过,这不影响这两个调试器的伟大!如果你自己写调试器的话,请一定要加上保存转储文件的功能。除了上文种提到的各种工具和调试器外,还有很多其它工具也可以保存转储文件。比如,DebugDiaAdPlusgflags 等。如果对哪个工具感兴趣,请自行研究。

总结

  • 有很多优秀的工具可以帮我们抓取转储文件,我认为最好用的非 procdump 莫属。
  • JIT Debug 非常有用,可以让我们在进程异常退出时收到通知,并做相应的处理。

参考资料

你需要知道的 N 种抓取 dump 的工具的更多相关文章

  1. 转:介绍一个好用的抓取dump的工具-ProcDump

    介绍一个好用的抓取dump的工具-ProcDump Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash ...

  2. 好用的抓取dump的工具-ProcDump

    Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原 ...

  3. 【转】Hibernate 原汁原味的四种抓取策略

    最近在研究 Hibernate 的性能优化的时候碰到了"抓取策略", 由于以前没有详细的研究过, 所以到处找资料, 但是无论从一些讲 Hibernate 书籍,还是他人 Blog ...

  4. Hibernate 原汁原味的四种抓取策略(转)

    原文出处:http://www.cnblogs.com/rongxh7/archive/2010/05/12/1733088.html     尊重原作者,访问原创地址 最近在研究 Hibernate ...

  5. 每个IT安全专业人员应该知道的12种根本漏洞

    每个IT安全专业人员应该知道的12种根本漏洞 每年,IT安全专业人员都面临着数千个新的软件漏洞和数百万个不同的恶意软件程序,但只有12种根本漏洞会让这些软件漏洞和恶意软件程序攻击你的设备.了解这些根本 ...

  6. 抓取dump

    1,在程序奔溃前部署.adplus.exe -crash -pn explorer.exe -o d: -crash:当进程挂掉的时候抓取dump,只能抓取到进程报错时的信息,如果进程不报错,就无法抓 ...

  7. WinDbg-如何抓取dump文件

    这要分两种情况:第一种情况:如果是Vista或者是Windows2008操作系统就是一个简单的事情,在任务管理器中,切换到"进程"选项卡,右键点击你想要创建dump文件的进程,然后 ...

  8. 使用ProcDump工具抓取dump

    首先得到要抓取的进程号 cd %windir%\syswow64\inetsrvappcmd list wp得到pid之后, 在任务管理器里发现w3wp.exe的CPU总在49%-60%左右, 间歇性 ...

  9. IIS崩溃时自动抓取Dump

    背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...

随机推荐

  1. python --- 对于需要关联的接口处理方法

    1.unittest对于需要关联的请求,怎么处理(如购物接口,需要先登录) a)把登录请求写到测试用例类的setUP函数中,这样每次调用测试用例,都会先执行setUP函数 b)全局变量的形式声明. c ...

  2. 大数据高可用集群环境安装与配置(09)——安装Spark高可用集群

    1. 获取spark下载链接 登录官网:http://spark.apache.org/downloads.html 选择要下载的版本 2. 执行命令下载并安装 cd /usr/local/src/ ...

  3. BZOJ:2244: [SDOI2011]拦截导弹

    问题: printf("%.5f ",0):为什么错了? 注意: 初始值很重要 题解: 三维偏序问题: 记录从前往后最长上升子序列长度pref,条数preg 从后往前suff,su ...

  4. 刷题48. Rotate Image

    一.题目说明 题目是48. Rotate Image,简而言之就是矩阵顺时针旋转90度.不允许使用额外的矩阵. 经过观察(写一个矩阵,多看几遍就知道了),旋转90度后: 第1行变为len-1列(最后一 ...

  5. 2.11 DataBinding 简单使用

    DataBindIng 在我理解看来类似于其他语言当中的全局变量,只修改一处就可全部修改 添加位置和代码如下: 打开DataBinding 开关: dataBinding { enabled true ...

  6. 一、CI框架(CodeIgniter)简介

    CI是一个非常好用,非常灵活的PHP框架,在官网https://codeigniter.org.cn/ :最新版本3.1.10 版 就可以尽情使用了. 不忘初心,如果您认为这篇文章有价值,认同作者的付 ...

  7. Java平台上的AOP实现机制

    Java平台上的AOP实现机制 动态代理(Dynamic Proxy)机制,在运行期间动态的为相应接口生成对应的代理对象.SpringAop默认情况下采用这种机制来实现AOP机能.缺点:相对于编译后的 ...

  8. gogs 升级

    可以使用 go get -u github.com/gogs/gogs 来升级,但是因为网络原因,这种升级方式失败了.另外一种是在 github 或者 gitee 上面直接下载源码,然后解压到 $GO ...

  9. expresscache和primocache加速资料整理-centos7缓存加速

    expresscache和primocachehttp://www.360doc.com/content/16/0111/17/256680_527142090.shtml 安装expresscach ...

  10. 第四章:Schema与数据类型优化

    1. 选择优化的数据类型 选择数据类型的原则 更小的通常更好:选择可以正确存储数据的最小数据类型 小的数据类型消耗更少的内存.CPU;占用更少的磁盘 选用简单的数据类型:简单的数据类型通常需要更少的C ...