天天看點

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檢視調試資訊嗎?

歡迎留言交流

繼續閱讀