事後除錯有兩個最基本的目標:1發現程式是在**崩潰的;2找出導致程式崩潰的原因。簡單地說,就是要找到程式中導致崩潰的指令位址。
轉儲檔案是程序狀態的乙個靜態快照。因此,在轉儲檔案上設定斷點並進行單步除錯是不可能的。
通過轉儲檔案來進行除錯可以作為一種手工除錯方式。在手工除錯方式中,我們只能檢視機器的狀態,你需要手工分析在程式中究竟是執行也怎樣的**才使得程式達到現有的姿態。顯然,通過狀態分析來構造**的執行流程比在實時除錯中分析**流程要更為困難。然而,在使用轉儲檔案時,我們仍然可以通過大量的除錯命令來將程式的狀態轉換為一種易於分析的形式;並且在大多數情況下,只要有足夠的耐心,總會找出問題的根源。
切換棧幀:.frame 切換棧幀,如.frame 1
檢視型別指令: dt,如 dt this
檢視棧指令: k,如
顯示區域性變數: dv。顯示本層區域性變數資訊
執行緒相關: ~
顯示彙編指令: u
u 向下反彙編
ub向上反彙編
uf反彙編整個函式
寫入彙編指令: a
顯示程序/執行緒環境引數(!peb 和 !teb 命令)
dps 顯示堆疊的所有內容
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-如何抓取dump檔案
window除錯學習3 記憶體除錯
動態記憶體分配錯誤有以下兩種基本型別 記憶體錯誤和記憶體洩露。當乙個指標或者該指標所指向的記憶體單元成為無效單元,或者記憶體中分配的資料結構被破壞時,就會造成記憶體錯誤。指標未被初始化 指標被初始化為乙個無效位址 指標被不小心錯誤地修改 在與指標相關聯的記憶體區域被釋放以後使用該指標 這種指標被稱為...
window下dump檔案的除錯
記得幾年前還在廣州的時候有讀過這本書,但比較粗略,並沒有融會貫通,可能是之前c 基礎較為薄弱。搬家後這本書沒有落掉,因此近段時間晚上1小時的讀書時間看起了這個。第一章主要講c 物件模型,主要分析c 物件模型的結構,當中還跟c語言做了一些對比,例如分析了為什麼c 要引入class,原因其實比較簡單,就...
gdb除錯學習
一般來說,gdb主要幫忙你完成下面四個方面的功能 1 啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。2 可讓被除錯的程式在你所指定的調置的斷點處停住。斷點可以是條件表示式 3 當程式被停住時,可以檢查此時你的程式中所發生的事。4 動態的改變你程式的執行環境。除錯的程式如下 root lo...