假設現在有檔案c1.c,在該目錄下開啟命令列,用gcc進行編譯,編譯的時候加上『-g』。它的目的是向編譯後的可執行程式中加入包括源**、符號表在內的除錯資訊,這些額外的內容將有助於gdb更好地完成除錯工作:
接下來啟動gdb並除錯剛生成的程式a.exe:
由於版本不同,這裡是gdb32。-silent用於遮蔽gdb的前導資訊,否則它會先在螢幕上列印一堆免責條款。啟動gdb後,它輸出的資訊表明已經讀入了a.exe的符號表。接下來,gdb會顯示自己的提示符「(gdb)」,提示並等待你輸入除錯命令。
在gdb中,設定斷點的方法很多,包括在指定的記憶體位址處設定斷點、在源**的某一行設定斷點或者在某個函式的入口處設定斷點,命令是「b」或者「break」。下面我們將main函式的入口處作為斷點:
b命令在執行後返回了斷點的具體資訊,也就是說,斷點的記憶體位址為0x40155d,對應於原始檔的第4行。
b * 0x40155d
*意味著是以記憶體位址作為斷點的。
或者,如果用源**行的形式設定這個斷點,則可以是:
b 5一旦設定了斷點,下一步就是用『r』或者『run』命令執行被除錯的程式,執行後會在第乙個斷點處停下來。
在執行了被除錯程式後,gdb的輸出資訊顯示程式已經啟動,下乙個將要執行的語句是第4行的「n=1;」注意,這條語句現在還沒有執行。
「p」或「print」命令用來顯示變數的值:
gdb的p命令用來列印乙個變數的值,在這裡是表示式n。gdb先計算表示式的值,並把它儲存在乙個儲存區中,儲存區的名字用「$」外加數字表示,並且這個數字會隨著除錯過程的進行不斷遞增(這意味著儲存區也是不斷開闢的)。上面的意思是表示式n的值儲存在「$1」中,其內容為21。
「n」或「next」用於繼續執行原始檔中的下一行。
「c」或「continue」用來持續執行程式,直至遇到斷點或者程式結束。
「q」或「quit」結束除錯工作。
參考:《c語言非常道》李忠著
除錯工具 gdb
gcc o a.out a.c gdb q a.out break main info register i r objdump d a.out grep a20 main.轉換為機器 objdump m intel d a.out grep a20 main.gdb 設定 1 gdb q 2 se...
gdb除錯工具
檢視幫助一是man 命令,二是進入 www.gnu.org 找到gdb的幫助文件 更詳細 gcc wall g main.c o main,只有這樣才能產生除錯資訊,包括core的除錯資訊。一 常用命令 run r 執行,執行到斷點,重新用r,表示重新開始執行。list l 列出源 l 2,l ma...
GDB除錯工具
mascot 射水魚 gdb官網 gdb適用的程式語言 ada c c objective c pascal 等。gdb的工作方式 本地除錯和遠端除錯。目前release的最新版本為8.0,gdb可以執行在linux 和windows 作業系統上。1.1 what is gdb?1 gdb gnud...