WinDBG常用斷點命令

WinDBG提供了多種設斷點的命令:

bp 命令是在某個地址下斷點, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction 。 對於後者,WinDBG 會自動找到MyApp!SomeFunction 對應的地址並設置斷點。 但是使用bp的問題在於:1)當代碼修改之後,函數地址改變,該斷點仍然保持在相同位置,不一定繼續有效; 2)WinDBG 不會把bp斷點保存工作空間中 。

bu 命令是針對某個符號下斷點。 比如 bu MyApp!SomeFunction 。 在代碼被修改之後, 該斷點可以隨着函數地址改變而自動更新到最新位置。  而且bu 斷點會保存在WinDbg工作空間中, 下次啓動 Windbg 的時候該斷點會自動設置上去。

還bu 可以對還不能識別的符號設置斷點,當系統中有新模塊加載進來時,調試器會對未定斷點再次進行識別,如果找到了匹配的符號則會設置它。而bp 斷點會失敗(因爲函數地址不存在),bu 斷點則可以成功。 新版的WinDBG中 bp失敗後會自動被轉成bu 。

bm 命令也是針對符號下斷點。 但是它支持匹配表達式。 很多時候你下好幾個斷點。 比如,把MyClass 所有的成員函數都下斷點: bu MyApp!MyClass::* , 或者把所有以CreateWindow開頭的函數都下斷點: bu user32!CreateWindow*

以上三個命令是對代碼下斷點, 我們還可以對數據下斷點。

ba 命令就是針對數據下斷點的命令, 該斷點在指定內存被訪問時觸發。 命令格式爲

ba Access Size [地址]

Access 是訪問的方式, 比如 e (執行), r (讀/寫), w (寫)

Size 是監控訪問的位置的大小,以字節爲單位。 值爲 1、2或4,還可以是 8(64位機)。

比如要對內存0x0483DFE進行寫操作的時候下斷點,可以用命令 ba w4 0x0483DFE

這裏順便提以下其他斷點命令:

bl  列出所有斷點

bc  清除斷點

bd 禁用斷點

be 啓動被bd 命令禁用的斷點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章