使用WinDbg抓取dump文件
一、Windows系統(tǒng)的任務管理器里抓dump
啟動任務管理器,選中某個進程,右鍵,彈出菜單"創(chuàng)建轉(zhuǎn)儲文件"




注意事項:
當你在64位Windows系統(tǒng)上抓32位進程的dmup文件時,如果用的是64位任務管理器,那么在用Windbg加載后,要用!wow64exts.sw切換到X86模式下,如果不想做這步切換,就要用32位的任務管理器來生成dmp文件。32位任務管理器在C:\Windows\SysWOW64\Taskmgr.exe
適合的場景:在任務管理器里還能看到進程,當程序出現(xiàn)業(yè)務問題、性能問題、失去響應;當程序崩潰跳出系統(tǒng)錯誤提示框的時候,特別適合應用在客戶機出現(xiàn)上述問題時使用。因為我們不用傳其他工具到客戶機上。
DPlus是如何工作的?
====
ADPlus 具有兩種操作模式:
“Hang”模式用于解決進程掛起、100% CPU 使用率以及不涉及崩潰的其他問題。當您在掛起模式下使用 ADPlus 時,在運行腳本之前必須等待,直到進程停止響應(與崩潰模式不同,掛起模式不是持久性的)。 “Crash”模式用于解決 Dr. Watson 錯誤導致的崩潰問題,或者用于解決導致程序或服務意外退出的任何其他類型的錯誤。當您在崩潰模式下使用 ADPlus 時,必須在發(fā)生崩潰前啟動 ADPlus。可以通過“-notify”開關(guān)對 ADPlus 進行配置,以便通知管理員或計算機發(fā)生了崩潰。 Hang模式
在此模式下,ADPlus 在腳本結(jié)束運行后立即為在命令行中指定的所有進程生成完全內(nèi)存轉(zhuǎn)儲。創(chuàng)建的每一個 .dmp 文件都會放在包含運行 ADPlus 時的日期/時間戳的文件夾中。每一個文件名都包含進程名、進程 ID,以及運行 ADPlus 時的日期/時間戳。在進程內(nèi)存正被轉(zhuǎn)儲到某一文件時,該進程被凍結(jié)。在創(chuàng)建完內(nèi)存轉(zhuǎn)儲文件之后,通過將非侵害性連接/分離與 CDB 調(diào)試程序一起使用來恢復進程。
Crash模式
在此模式下,ADPlus 將 CDB 調(diào)試程序連接到在命令行中指定的所有進程。ADPlus 自動配置調(diào)試程序以監(jiān)視下列類型的異常:
無效句柄 非法指令 整數(shù)被零除 浮點數(shù)被零除 整數(shù)溢出 無效的鎖定順序 訪問沖突 堆棧溢出 C++ EH 異常 未知異常 使用ADPlus的命令舉例
====
為Hang住的情況抓Dump:
adplus -hang -pn w3wp.exe -o C:\dumps 為所有的w3wp.exe進程創(chuàng)建dump到C:\dumps
adplus -hang -p 1244 為進程ID為1244的進程創(chuàng)建內(nèi)存轉(zhuǎn)儲文件.
adplus -hang –IIS 為所有跟IIS相關(guān)的進程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)創(chuàng)建內(nèi)存轉(zhuǎn)儲文件.
為Crash的情況抓Dump:
adplus -crash -pn w3wp.exe 在崩潰的時候為所有的w3wp.exe進程創(chuàng)建內(nèi)存轉(zhuǎn)儲文件
adplus -crash -p 1244 在進程ID為1244的進程崩潰的時候為它創(chuàng)建內(nèi)存轉(zhuǎn)儲文件
adplus -crash –IIS 為所有跟IIS相關(guān)的進程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)創(chuàng)建崩潰時的內(nèi)存轉(zhuǎn)儲文件.
1、利用WinDbg里的adplus來獲取dump文件
Adplus.vbs 是一個Visual Basic Script 文件,Adplus 主要用來生成內(nèi)存轉(zhuǎn)儲文件 (dump file),內(nèi)存轉(zhuǎn)儲文件適用于不能實時調(diào)試的情況下。在WinDbg安裝目錄里可以找到adplus.vbs,使用adplus.vbs生成dump文件,
adplus -hang -o d:\dump -p 1234
其中hang表示附加到進程,如果是crash,則為目標進程崩潰的時候抓取,-o后面的參數(shù)表示dump文件存到位置,-p后面的數(shù)字為進程的PID,也可以是-pn后面跟進程名稱,如:adplus.vbs-hang -pn ConsoleWindbg.exe -o D:\dump
2、使用Debug Diagnostic Tool(DebugDiag)工具獲取dump文件
下載Debug Diagnostic Tool然后進行安裝,打開該工具,DebugDiagnostic Tool可以選擇不同的規(guī)則來進行dump文件。可以根據(jù)程序崩潰時捕獲dump文件,也可以根據(jù)性能指標來進行捕獲,如CPU過高,死鎖,HTTP響應時間過程等參數(shù)。如下圖:
也可以找到對應的進程,通過如下方法進行捕獲。此種方式獲取的dump文件放到C:\Program Files\DebugDiag\Logs\Misc下。
3、使用.dump命令
1) 打開WinDBG—>File—>Attach to a Process,然后選擇將之要進行捕獲的進程。如我們這里要對ConsoleWindbg.exe進程產(chǎn)生dump文件。選擇后如圖:


2)在上圖紅色區(qū)域的輸入框內(nèi)輸入產(chǎn)生dump 文件的命令 .dump 。可以選擇不同的參數(shù)來生成不同類型的dump文件。
選項(1): /m
命令行示例:.dump /m D:/dump/myapp.dmp
注解: 缺省選項,生成標準的minidump, 轉(zhuǎn)儲文件通常較小,便于在網(wǎng)絡上通過郵件或其他方式傳輸。 這種文件的信息量較少,只包含系統(tǒng)信息、加載的模塊(DLL)信息、 進程信息和線程信息。
選項(2): /ma
命令行示例:.dump /ma D:/dump/myapp.dmp
注解: 帶有盡量多選項的minidump(包括完整的內(nèi)存內(nèi)容、句柄、未加載的模塊,等等),文件很大,但如果條件允許(本機調(diào)試,局域網(wǎng)環(huán)境), 推薦使用這中dump。
選項(3):/mFhutwd
命令行示例:.dump /mFhutwd D:/dump/myapp.dmp
注解:帶有數(shù)據(jù)段、非共享的讀/寫內(nèi)存頁和其他有用的信息的minidump。包含了通過minidump能夠得到的最多的信息。是一種折中方案。
4、使用ProcDump工具
Procdump是一個輕量級的命令行工具, 它的主要目的是監(jiān)控應用程序的CPU異常動向, 并在此異常時生成crash dump文件, 供研發(fā)人員和管理員確定問題發(fā)生的原因。你還可以把它作為生成dump的工具使用在其他的腳本中。有了它, 就完全不需要在同一臺服務器上使用諸如32位系統(tǒng)上的Debug Diag 1.1或是64位系統(tǒng)上的ADPlus了。
Procdump下載:http://technet.microsoft.com/en-us/sysinternals/dd996900
procdump -ma -c 50% -s 3 -n 2 5844 (Process Name or PID) -oc:\dumpfile
-ma 生成full dump, 即包括進程的所有內(nèi)存. 默認的dump格式包括線程和句柄信息。
-c 在CPU使用率到達這個閥值的時候, 生成dump文件。
-s CPU閥值必須持續(xù)多少秒才抓取dump文件。
-n 在該工具退出之前要抓取多少個dump文件。
-o dump文件保存目錄。
原文鏈接:

浙公網(wǎng)安備 33010602011771號