dump基礎

2021-05-01 03:00:17

一、前言

DUMP:將程序或系統在某一時間點的記憶體資訊轉儲為一個檔案。
需要抓取dump的情況:常用於程序崩潰、卡死、卡住一段時間、系統卡死無法操作、系統藍屏時的問題分析。

二、術語

1、轉儲分類

小記憶體轉儲(mini dump):只是儲存記憶體前64K的基本記憶體空間的資料
核心記憶體轉儲(kernel dump):儲存作業系統和相關係統級別服務的資料,系統核心態資訊
完全記憶體轉儲(full dump):就是將記憶體中的資料全部儲存,包括系統資料和使用者資料,包含核心態和使用者態的資訊

三、具體操作

1、如何選擇是抓取dump檔案

a、程序崩潰、卡死、卡住一段時間,需要程序的full dump資訊
b、作業系統卡死無法操作,需要full dump資訊
c、作業系統藍屏,多數情況只需要kernel dump資訊

mini dump在多數情況下都無法分析出問題的具體原因,只能初步判斷問題發生時間、頻次和問題可能與哪方面有關

2、如何獲取Windows作業系統的DUMP

3、如何獲取程序DUMP

1)程序崩潰有彈窗

當第三方程式崩潰後,在未點選彈窗視窗上的關閉或其他按鈕時,所有錯誤資訊都還保留在主機的記憶體中,這時直接抓取Dump檔案。

方法1:
①以管理員身份執行ProcessExplorer程式,然後滑鼠左鍵按住介面上的瞄準鏡圖示,然後拖動到報錯的視窗或者相應程序的視窗上鬆開滑鼠
,此時,ProcessExplorer會自動定位到出錯的程序上;
②然後右鍵點選該程序,選擇"Create Dump",然後選擇"Create Full Dump",選擇儲存的路徑,產生dump檔案
注意:若不是管理員執行,會提示拒絕存取。

方法2:
①如有多個程序無法確定PID,參照方法1用ProcessExplorer定位一下崩潰程序的PID;
②執行WinDbg後,依次點選"File",然後選擇"Attach to a Process";
③在彈出的介面中,找到剛才捕捉到的PID或者輸入PID,然後點OK;
④點完OK後,你就會看到可以抓取Dump的介面了,再用dump儲存引數儲存Dump即可:.dump -mfh c:\xxxx.dmp

方法3:
①如有多個程序無法確定PID,參照方法1用ProcessExplorer定位一下崩潰程序的PID;
②開啟工作管理員,找到相應程序,右鍵點選,選擇"建立轉儲檔案";
③根據轉儲檔案提示路徑,提取dump檔案;

方法4:適用於系統程序彈窗崩潰

此時使用ProcessExplorer去抓取這個彈框的程序,抓這個程序的DUMP,肯定是會抓錯的。這種彈框是系統程序彈的,彈框上明顯的告訴了是哪個程序崩潰,直接去抓那個程序就行。

2)程序崩潰時無彈窗

此時需要使用WinDbg監控程序崩潰情況,一旦出現崩潰即刻彈窗捕獲。
特點:
①無需指定要抓取的程序或PID,也不要求設定環境時必須存在程序,只要任意程式崩潰後都可以抓到Dump;
②必須在出現問題之前,先佈置好抓取環境;
③程式正常關閉時,比如點關閉時,不會生成Dump,只有程式崩潰時才會生成。
步驟:
①設定WinDbg抓取環境。在「開始」---「執行」輸入windbg路徑:C:\WinDbg\Windbg.exe -I (注意這裡是i的大寫字母,不是L的小寫)
②執行該引數時,WinDbg會彈出一個提示(WinDbg was successfully installed as the default postmortem debugger,),點選確定後WinDbg介面會消失。此時就代表環境已經設定好,現在就需要等程序崩潰。
③在程式崩潰時,WinDbg視窗會自動彈出來時,使用命令儲存Dump檔案:.dump -mfh d:\test.dmp
注意:當開始儲存Dump檔案時,左下角的狀態資訊會變成Busy,表示WinDbg正在工作,Dump儲存完成後會出現「Dump successfully written」這個提示
抓取完dump好後,關閉預設偵錯程式的設定:
對於32位元作業系統:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger
對於64位元作業系統:HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger

在這個登入檔項中,調整Auto值為0, 這裡的0表示出現崩潰彈出對話方塊讓使用者選擇偵錯程式,1表示自動彈出預設的偵錯程式。