天天看点

dump分析工具_你需要知道的 N 种抓取 dump 的工具

前言

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

约定

下文中提到的异常,都是指未处理的异常。为了行文方便(其实是我懒,想少打几个字),用异常代替。

各种抓取转储文件的工具

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

  1. 任务管理器

    任务管理器是唾手可得的抓取转储文件的工具。按住

    Ctrl + Shift + Esc

    即可打开。打开任务管理器后,在需要转储的进程上

    右键

    ->

    创建转储文件(C)

    ,即可自动保存转储文件到

    %tmp%

    目录下。
    dump分析工具_你需要知道的 N 种抓取 dump 的工具
    使用 taskmanager 抓取 dump 截图

提示:

创建成功后,会弹出对话框提示转储文件保存的位置。一般保存在系统临时目录下。在文件管理器地址栏输入

%temp%

即可快速打开临时目录,对

%appdata%

等其它目录同样有效。
dump分析工具_你需要知道的 N 种抓取 dump 的工具

how-to-open-temp-folder

  1. process explorer

    process explorer

    比系统自带的任务管理器更强大,之前写过一篇文章介绍使用 process explorer 替换任务管理器的文章。感兴趣的小伙伴儿可以看一看。打开

    process explorer

    ,在需要转储的进程上,

    右键

    ->

    Create Dump

    ->

    Create Full Dump...

    就可以保存转储文件了。(

    Create Minidump...

    抓取的信息少,但抓取的转储文件小,适合网络传输,请根据自己的需要选择)
    dump分析工具_你需要知道的 N 种抓取 dump 的工具
    使用 process explorer 抓取 dump 截图

3. visual studio

visual studio

简称

vs

,大家应该对

vs

应该非常熟悉了,我就不多介绍了。打开

vs

,附加到需要转储的进程上,点击

Break All

按钮(或者按快捷键

Ctrl + Alt + Break

)暂停目标进程。然后点击

Debug

->

Save Dump As...

就可以保存转储文件了。如果不暂停目标进程,

Save Dump As...

按钮是置灰的。

使用 vs 抓取 dump 录屏

提示:

可以使用

Ctrl + Alt + P

快速打开

Attach to Process

界面,选择要附加的进程。

4. windbg

windbg

windows

系统上非常强大的调试器,基本上我只用

windbg

分析转储文件。能分析转储文件,当然能保存转储文件了。打开

windbg

,附加到需要转储的进程上,执行

.dump [Options] path/to/save/dump.dmp

使用 windbg 抓取 dump 录屏

可以使用

.hh .dump

查看

.dump

命令的帮助文档。其中的

/m[MiniOptions]

会直接影响生成的转储文件的内容和尺寸。我们有必要了解每个选项的意义。因为我实在是太懒了,就贴一张

MSDN

上的截图吧。

dump分析工具_你需要知道的 N 种抓取 dump 的工具

注意:

最好用

32

位的

windbg

附加 

32

位进程,

64

位的

windbg

附加 

64

位进程。如果用

64

位的

windbg

附加到

32

位进程后,直接执行

.dump

命令生成的转储文件会 “有问题”。
  1. procdump

    终于,要介绍我最喜欢的

    procdump

    了。

    procdump

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

    procdump

    的章节。
  • 直接运行

    procdump

    查看用法。
    dump分析工具_你需要知道的 N 种抓取 dump 的工具
    procdump 帮助
  • 运行

    procdump -? -e

    查看使用范例。
    dump分析工具_你需要知道的 N 种抓取 dump 的工具
    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

注意:

-x

选项必须在最后。

-x

后面必须跟着转储文件的保存路径。
  • -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]

  • 监视进程的运行状态,不论是否发生异常,只要进程退出就创建转储文件。

注意:

因为

-w

是用来等待尚未启动的进程的,所以不能与

process_id

一起使用。没启动的进程当然没有进程

ID

了。如果在一起使用,会报如下错误:

The wait option requires the process be specified by name.

  • 每隔

    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 实战指南》。

    dump分析工具_你需要知道的 N 种抓取 dump 的工具
    -mp选项介绍 截自英文版
  • 安装

    procdump

    为事后调试器(

    postmortem debugger

    ),或者叫

    JIT

    调试器 (

    Just In Time Debugger

    )。

    以管理员权限运行

    procdump -i

    可以注册

    procdump

    为事后调试器。注册的时候可以指定转储文件保存的路径,及转储选项。例如,

    procdump -mp -i e:\dumps\

    以管理员权限运行

    procdump -u

    可以解除注册。

提示:

以管理员权限运行

windbg -I

可以设置

windbg

为事后调试器。注意:是大写的

I

,不是小写的

i

。后面会专门写一篇文章介绍

Just In Time Debug

相关的内容。
  • Much Much More ...
你知道吗?

procdump

官方文档中的

Learn More

一节中有

Defrag Tools

上的视频链接,非常值得一看。

procdump

的作者是

Mark Russinovich

Andrew Richards

Andrew Richards

Defrag Tools

的主持人之一。

这里是一份使用

procdump

的录屏,展示了上面介绍的几种用法,感兴趣的小伙伴可以点开看看。

procdump 用例示范

  1. 其它工具

    讲道理,只要是调试器就应该提供保存转储文件的功能。比如,

    cdb

    ,

    ntsd

    等。令我感到意外的是

    x64dbg

    ollydbg

    居然没有保存转储文件的功能?不过,这不影响这两个调试器的伟大!如果你自己写调试器的话,请一定要加上保存转储文件的功能。除了上文中提到的各种工具和调试器外,还有很多其它工具也可以保存转储文件。比如,

    DebugDia

    AdPlus

    gflags

    等。如果对哪个工具感兴趣,请自行研究。

总结

  • 有很多优秀的工具可以帮我们抓取转储文件,我认为最好用的非

    procdump

    莫属。
  • JIT Debug

    非常有用,可以让我们在进程异常退出时收到通知,并做相应的处理。

参考资料

  • 《软件调试》
  • 《Windows Sysinternals 实战指南》
  • Microsoft Document : .dump (Create Dump File)[2]
  • procdump[3]

References:

[1] 官方文档:  https://docs.microsoft.com/en-us/sysinternals/downloads/procdump

[2] Microsoft Document : .dump (Create Dump File): https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-dump--create-dump-file-

[3] procdump:  https://docs.microsoft.com/en-us/sysinternals/downloads/procdump

猜你喜欢:

转储文件知多少

[原]调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

[原]调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

[原]调试实战——崩溃在ComFriendlyWaitMtaThreadProc

[原]调试实战——调试PInvoke导致的内存破坏

[原]调试实战——调试excel启动时死锁

[原]调试实战——调试TerminateThread导致的死锁

[原]调试实战——调试DLL卸载时的死锁

[原]排错实战——拯救加载调试符号失败的IDA

[原]排错实战——使用process explorer替换任务管理器

[原]排错实战——VS清空最近打开的工程记录

[原]排错实战——解决Tekla通过.tsep安装插件失败的问题

[原]排错实战——你知道拖动窗口时只显示虚框怎么设置吗?

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

你知道怎么使用DebugView查看调试信息吗?

欢迎留言交流

继续阅读