2.3.2 Adplus,抓取dump的方便工具
前面提到了dump檔案能儲存進程狀態,方便分析。由於dump檔案記錄的是進程某一時刻的具體資訊,所以儲存dump的時機非常重要。比如程式崩潰,dump應該選在引發崩潰的指令執行時(也就是1st chance exception發生的時候)擷取,這樣分析dump的時候就能夠看到問題的直接原因。
Adplus是跟Windbg在同一個目錄的VBS指令碼。Adplus主要是用來抓取dump檔案。 詳細的資訊,可以參考Windbg協助檔案中關於adplus的協助。有下面一些常見用法:
假設我們的目標程式是test.exe:
假設test.exe運行一段時間崩潰,在test.exe啟動後崩潰前的這個時間段,運行下面的命令監視:
Adplus –crash –pn test.exe –o C:/dumps |
當test.exe發生2nd chance exception崩潰的時候,adplus在C:/dumps產生full dump檔案。當發生1st chance AV exception, 或者1st chance breakpoint exception的時候,adplus在C:/dumps產生mini dump檔案。
也可以用:
Adplus –crash –pn test.exe –fullonfirst –o C:/dumps |
差別在於,加上-fullonfirst參數後,無論是1st chance exception還是2nd chance exception,都會產生full dump檔案。
假如test.exe發生deadlock,或者memory leak,並不是crash,需要擷取任意時刻的一個dump,可以用下面的命令:
Adplus –hang –pn test.exe –o C:/dumps |
該命令立刻把test.exe的full dump 抓到C:/dumps下。
Adplus更靈活的方法就是用-c參數帶設定檔。在設定檔裡面,可以選擇exception發生的時間,產生的dump是mini dump還是full dump,還可以設定斷點等等。對於adplus各項參數的選用原則,在最後一章還會作進一步介紹。