windbg 命令 4 windbg除錯符號表1

2021-10-12 00:16:01 字數 1108 閱讀 1108

我們都知道,程式根據配置不同,可以build成release和debug兩個版本。一般發布出去的是release版本,相比debug版本,release版本檔案小,執行快,但相對的,其攜帶的資訊也更少。所以開發人員在遇見問題時,都會build乙個debug版本去重現場景,然後通過偵錯程式去發現root cause,進而解決問題,而其原因就是debug版本,聯結器在生成*.exe和*.dll時,還會生成帶有關於程式詳細符號資訊pdb檔案(program debug database)。

符號表包含很多用於debug的內容,包括詳細的型別資訊,函式資訊(函式名稱以及入口位址),源**行數,堆疊大小,優化資訊,堆疊的資訊......如果你想閱讀pdb檔案裡面的資訊,可以通過一些工具讀取,比如微軟自帶的dbh.exe,通過執行命令""c:\program files(x86)\windows kits\10\debuggers\x64\dbh.exe" -v demo.pdb dump",可以將pdb轉化成可以閱讀的文字。下圖中紅框的兩行分別是源程式中main和fun的兩個函式。關於dbh.exe更詳細的用法,可以參考文件。

為什麼除錯時我們需要符號表?

所以,在除錯時,偵錯程式(windbg.exe)就像乙個中介一樣,可以將.exe中的記憶體位址與.pdb檔案中的符號資訊對應起來。

那pdb檔案只有在構建debug版本時才建立嗎?答案是no。pdb檔案在構建release版本時也會生成,只是相對debug版本,資訊不太全面而已,但還是很重要的。

想象下,你的release版本遇見crash問題,如果用debug版本重現問題會非常耗時,而你需要快速定位問題,或者至少有相對正確的猜想和懷疑位置。此時,你可以直接將源**attach到release版本,crash時你可以看到call stack(函式名),雖然沒法檢視源**,但有了關注的位置,再用debug版本去檢視具體的記憶體資訊,解決問題就會快速很多。

Windbg斷點命令

windbg斷點命令 1 bu bp bm設定軟體斷點 a bp設定位址關聯的斷點 b bu設定符號關聯的斷點 c bm支援設定含萬用字元的斷點,可以一次建立乙個或多個bu或bp bm d 斷點 bp和bu的主要區別 a bp所設斷點和位址關聯,如果模組把該位址的指令移到其它地方,斷點不會隨之移動,...

windbg命令示例

device tree 那的顯示僅僅是個名字而已 它們都是 device object 我還是喜歡 windbg 的原汁原味 0 kd drvobj atapi driver object 89de2b60 is for driver atapi driver extension list id a...

Windbg斷點命令

文章 1 bu bp bm設定軟體斷點 a bp設定位址關聯的斷點 b bu設定符號關聯的斷點 c bm支援設定含萬用字元的斷點,可以一次建立乙個或多個bu或bp bm d 斷點 bp和bu的主要區別 a bp所設斷點和位址關聯,如果模組把該位址的指令移到其它地方,斷點不會隨之移動,而是依然關聯在在...