1. 程式人生 > >window除錯學習2——事後除錯

window除錯學習2——事後除錯

事後除錯有兩個最基本的目標:1發現程式是在哪裡崩潰的;2找出導致程式崩潰的原因。簡單地說,就是要找到程式中導致崩潰的指令地址。

轉儲檔案是程序狀態的一個靜態快照。因此,在轉儲檔案上設定斷點並進行單步除錯是不可能的。

通過轉儲檔案來進行除錯可以作為一種手工除錯方式。在手工除錯方式中,我們只能檢視機器的狀態,你需要手工分析在程式中究竟是執行也怎樣的程式碼才使得程式達到現有的姿態。顯然,通過狀態分析來構造程式碼的執行流程比在實時除錯中分析程式碼流程要更為困難。然而,在使用轉儲檔案時,我們仍然可以通過大量的除錯命令來將程式的狀態轉換為一種易於分析的形式;並且在大多數情況下,只要有足夠的耐心,總會找出問題的根源。

windbg命令

切換棧幀:.frame 切換棧幀,如.frame 1

檢視型別指令: dt,如 dt this

檢視棧指令: k,如 

顯示區域性變數: dv。顯示本層區域性變數資訊

執行緒相關: ~ 

顯示彙編指令: u

u 向下反彙編
ub向上反彙編
uf反彙編整個函式

寫入彙編指令: a

顯示程序/執行緒環境引數(!peb 和 !teb 命令)

dps 顯示堆疊的所有內容

windbg基本使用

1.set

1.1 設定Symbol file path

file->symbol file path,

如:本應用pdb

1.2 設定source file path

file->source file path

如:本應用原始碼目錄

2.開始

2.1將dmp檔案拉至windbg介面

2.2輸入命令,開始自動分析

!analyze -v

2.3詳細報告

通過上面得到的簡要報告,找到這一行,不一定文字一樣,

如:stack_command: ~13; .ecxr; kb

將上面的命令輸入,得到詳細資訊

再通過View->locals,可以看區域性變數

利用WinDbg找出程式崩潰的程式碼行號

http://www.cctry.com/forum.php?mod=viewthread&tid=41078&fromuid=1817
WinDbg-如何抓取dump檔案
http://www.cnblogs.com/netwy/articles/2520428.html