dump檔案產生
如果需要使用Windbg產生dump檔案,可以使用.dump命令,該命令可以接/m或/f來產生minidump和fulldump,/m後面還可以接更多的命令控制,如/f控制產生記憶體dump,通常使用.dump /mf來產生dump,這樣的minidump比fulldump包含更多的調試資訊。
dump控制代碼資訊
在minidump中如果要把控制代碼資訊業dump出來(如控制代碼泄漏調試可能需要用到!handle命令),則需要加上/h參數,如.dump /mfh
事後調試器設定
事後調試器也就是即時調試器,比如一個進程在運行過程中發生崩潰,即時如果設定了事後調試器則會自動彈出是否進行調試的對話方塊。事後調試器註冊表路徑為
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
AeDebug下有兩個重要的索引值:Auto和Debugger。Auto表示當發生崩潰時是否顯示一個訊息框,0表示顯示,1表示不顯示(就是XX程式遇到錯誤需要關閉那個提示對話方塊);Debugger指定事後調試器是哪個調試器,通常的調試器都提供了GUI操作介面,我們通常不需要手動修改註冊表。
事後控制代碼泄漏調試
!htrace命令不能再在dump檔案中使用,所以我們需要在轉儲dump檔案時就需要通過!htrace命令把資訊輸出到日誌。組建記錄檔檔案可通過“.logopen filename”和“.logclose”來實現,然後結合記錄檔分析dump。
通過ADPlus產生dump檔案
切換到Windbg.exe所在目錄,命令列下以管理員身份運行“adplus.vbs { -hang | -crash } { -pn Process | -p PID } [-o Directory]”來產生dump檔案;-hang表示對已經掛起的程式產生dump檔案;-crash表示即時監控進程到其crash時產生dump檔案;-pn表示進程名字;-p表示pid;-o表示輸出目錄。
如果提示“The following requested processes are not executing – error in adplus.vbs”,請升級你的Windbg到最新版本。
dump檔案收集
現在主流的產品都有dump上報機制,如迅雷的安裝目錄下能夠找到XLBugReport.exe這樣的程式,有的程式在啟動時會先檢測BugReport程式是否完整,如果不完整則拒絕運行。
微軟性錯誤報表服務(WER)
除了自己收集dump上傳到伺服器外,還可以通過Windows自身來收集錯誤報表,這需要註冊微軟的錯誤報表服務(WER : Windows Error Reporting),過程比較麻煩,部分服務收費。
本部落格很少轉載他人文章,如未特別標明,均為原創,轉載請註明出處:
本文出自程式人生 >> Windbg事後調試
作者:代碼瘋子