使用WinDbg抓取dump文件


 

 

 

 

一、Windows系統的任務管理器里抓dump

啟動任務管理器,選中某個進程,右鍵,彈出菜單"創建轉儲文件"

注意事項:

當你在64位Windows系統上抓32位進程的dmup文件時,如果用的是64位任務管理器,那么在用Windbg加載后,要用!wow64exts.sw切換到X86模式下,如果不想做這步切換,就要用32位的任務管理器來生成dmp文件。32位任務管理器在C:\Windows\SysWOW64\Taskmgr.exe

 適合的場景:在任務管理器里還能看到進程,當程序出現業務問題、性能問題、失去響應;當程序崩潰跳出系統錯誤提示框的時候,特別適合應用在客戶機出現上述問題時使用。因為我們不用傳其他工具到客戶機上

img

DPlus是如何工作的?

====

ADPlus 具有兩種操作模式:

“Hang”模式用於解決進程掛起、100% CPU 使用率以及不涉及崩潰的其他問題。當您在掛起模式下使用 ADPlus 時,在運行腳本之前必須等待,直到進程停止響應(與崩潰模式不同,掛起模式不是持久性的)。 “Crash”模式用於解決 Dr. Watson 錯誤導致的崩潰問題,或者用於解決導致程序或服務意外退出的任何其他類型的錯誤。當您在崩潰模式下使用 ADPlus 時,必須在發生崩潰前啟動 ADPlus。可以通過“-notify”開關對 ADPlus 進行配置,以便通知管理員或計算機發生了崩潰。 Hang模式

在此模式下,ADPlus 在腳本結束運行后立即為在命令行中指定的所有進程生成完全內存轉儲。創建的每一個 .dmp 文件都會放在包含運行 ADPlus 時的日期/時間戳的文件夾中。每一個文件名都包含進程名、進程 ID,以及運行 ADPlus 時的日期/時間戳。在進程內存正被轉儲到某一文件時,該進程被凍結。在創建完內存轉儲文件之后,通過將非侵害性連接/分離與 CDB 調試程序一起使用來恢復進程。

Crash模式

在此模式下,ADPlus 將 CDB 調試程序連接到在命令行中指定的所有進程。ADPlus 自動配置調試程序以監視下列類型的異常:

無效句柄 非法指令 整數被零除 浮點數被零除 整數溢出 無效的鎖定順序 訪問沖突 堆棧溢出 C++ EH 異常 未知異常 使用ADPlus的命令舉例

====

為Hang住的情況抓Dump:

adplus -hang -pn w3wp.exe -o C:\dumps 為所有的w3wp.exe進程創建dump到C:\dumps

adplus -hang -p 1244 為進程ID為1244的進程創建內存轉儲文件.

adplus -hang –IIS 為所有跟IIS相關的進程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)創建內存轉儲文件.

為Crash的情況抓Dump:

adplus -crash -pn w3wp.exe 在崩潰的時候為所有的w3wp.exe進程創建內存轉儲文件

adplus -crash -p 1244 在進程ID為1244的進程崩潰的時候為它創建內存轉儲文件

adplus -crash –IIS 為所有跟IIS相關的進程(比如w3wp.exe, inetinfo.exe, aspnet_wp.exe 和dllhost.exe)創建崩潰時的內存轉儲文件.

 


1、利用WinDbg里的adplus來獲取dump文件

Adplus.vbs 是一個Visual Basic Script 文件,Adplus 主要用來生成內存轉儲文件 (dump file),內存轉儲文件適用於不能實時調試的情況下。在WinDbg安裝目錄里可以找到adplus.vbs,使用adplus.vbs生成dump文件,

adplus -hang -o d:\dump -p 1234

其中hang表示附加到進程,如果是crash,則為目標進程崩潰的時候抓取,-o后面的參數表示dump文件存到位置,-p后面的數字為進程的PID,也可以是-pn后面跟進程名稱,如:adplus.vbs-hang -pn ConsoleWindbg.exe -o D:\dump

2、使用Debug Diagnostic Tool(DebugDiag)工具獲取dump文件

下載Debug Diagnostic Tool然后進行安裝,打開該工具,DebugDiagnostic Tool可以選擇不同的規則來進行dump文件。可以根據程序崩潰時捕獲dump文件,也可以根據性能指標來進行捕獲,如CPU過高,死鎖,HTTP響應時間過程等參數。如下圖:

img

也可以找到對應的進程,通過如下方法進行捕獲。此種方式獲取的dump文件放到C:\Program Files\DebugDiag\Logs\Misc下。

img

3、使用.dump命令

1) 打開WinDBG—>File—>Attach to a Process,然后選擇將之要進行捕獲的進程。如我們這里要對ConsoleWindbg.exe進程產生dump文件。選擇后如圖:

img

img

img

 

 

 

2)在上圖紅色區域的輸入框內輸入產生dump 文件的命令 .dump 。可以選擇不同的參數來生成不同類型的dump文件。

選項(1): /m

命令行示例:.dump /m D:/dump/myapp.dmp

注解: 缺省選項,生成標准的minidump, 轉儲文件通常較小,便於在網絡上通過郵件或其他方式傳輸。 這種文件的信息量較少,只包含系統信息、加載的模塊(DLL)信息、 進程信息和線程信息。

選項(2): /ma

命令行示例:.dump /ma D:/dump/myapp.dmp

注解: 帶有盡量多選項的minidump(包括完整的內存內容、句柄、未加載的模塊,等等),文件很大,但如果條件允許(本機調試,局域網環境), 推薦使用這中dump。

選項(3):/mFhutwd

命令行示例:.dump /mFhutwd D:/dump/myapp.dmp

注解:帶有數據段、非共享的讀/寫內存頁和其他有用的信息的minidump。包含了通過minidump能夠得到的最多的信息。是一種折中方案。

4、使用ProcDump工具

Procdump是一個輕量級的命令行工具, 它的主要目的是監控應用程序的CPU異常動向, 並在此異常時生成crash dump文件, 供研發人員和管理員確定問題發生的原因。你還可以把它作為生成dump的工具使用在其他的腳本中。有了它, 就完全不需要在同一台服務器上使用諸如32位系統上的Debug Diag 1.1或是64位系統上的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, 即包括進程的所有內存. 默認的dump格式包括線程和句柄信息。

-c 在CPU使用率到達這個閥值的時候, 生成dump文件。

-s CPU閥值必須持續多少秒才抓取dump文件。

-n 在該工具退出之前要抓取多少個dump文件。

-o dump文件保存目錄。

 

原文鏈接:https://blog.csdn.net/zyx_hawk/article/details/77524762

轉載參考,活着的蟲子老師:https://www.cnblogs.com/yilang/p/11106495.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM