編譯時必須加上參數-g ,例:g++ -g temp.cpp -o temp.通過Gcc編譯生成可執行文件才能用Gdb進行調試。
進入gdb界面 : gdb temp. 提示符變成(gdb) (1)查看文件 在Gdb中鍵入”l”(list)就可以查看所載入的文件(2)設置斷點 只需在”b”后加入對應的行號即可(這是最常用的方式,另外還有其他方式設置斷點)。如下所示: (gdb)b 6 代碼運行到第五行之前暫停(並沒有運行第五行)。 (3)查看斷點情況 (Gdb) info b (4)運行代碼 Gdb默認從首行開始運行代碼,可鍵入”r”(run)即可(若想從程序中指定行開始運行,可在r后面加上行號)。 (5)查看變量值 查看斷點處的相關變量值。在Gdb中只需鍵入”p”+變量值即可,如下所示: (Gdb) p n Gdb在顯示變量值時都會在對應值之前加上”$N”標記,它是當前變量值的引用標記,所以以后若想再次引用此變量就可以直接寫作”$N”,而無需寫冗長的變量名。 (6)單步運行使用命令”n”(next)或”s”(step),它們之間的區別在於:若有函數調用的時候,”s”會進入該函數而”n”不會進入該函數。因此,”s”就類似於VC等工具中的”step in”,”n”類似與VC等工具中的”step over”。 (7)恢復程序運行 使用命令”c”(continue). 在Gdb中,程序的運行狀態有“運行”、“暫停”和“停止”三種,其中“暫停”狀態為程序遇到了斷點或觀察點之類的,程序暫時停止運行,而此時函數的地址、函數參數、函數內的局部變量都會被壓入“棧”(Stack)中。故在這種狀態下可以查看函數的變量值等各種屬性。但在函數處於“停止”狀態之后,“棧”就會自動撤銷,它也就無法查看各種信息了。 Gdb中的命令主要分為以下幾類:工作環境相關命令、設置斷點與恢復命令、源代碼查看命令、查看運行數據相關命令及修改運行參數命令。以下就分別對這幾類的命令進行講解。 1.工作環境相關命令
2.設置斷點與恢復命令
由於設置斷點在Gdb的調試中非常重要,所以在此再着重講解一下Gdb中設置斷點的方法。 Gdb中設置斷點有多種方式:其一是按行設置斷點,設置方法在3.5.1節已經指出,在此就不重復了。另外還可以設置函數斷點和條件斷點,在此結合上一小節的代碼,具體介紹后兩種設置斷點的方法。 ① 函數斷點 (gdb) b 函數名 ② 條件斷點 格式為:b 行數或函數名 if 表達式 (gdb) b 8 if i==10 3.Gdb中源碼查看相關命令
4 .Gdb中查看運行數據相關命令 指當程序處於“運行”或“暫停”狀態時,可以查看的變量及表達式的信息
5.Gdb中修改運行參數相關命令Gdb還可以修改運行時的參數,並使該變量按照用戶當前輸入的值繼續運行。它的設置方法為:在單步執行的過程中,鍵入命令“set 變量=設定值”。這樣,在此之后,程序就會按照該設定的值運行了。下面,筆者結合上一節的代碼將n的初始值設為4,其代碼如下所示: (Gdb) b 7 Breakpoint 5 at 0x804847a: file test.c, line 7. (Gdb) r Starting program: /home/yul/test The sum of 1-m is 1275 Breakpoint 5, main () at test.c:7 7 for(i=1; i<=50; i++) (Gdb) set n=4 (Gdb) c Continuing. The sum of 1-50 is 1279 Program exited with code 031. 可以看到,最后的運行結果確實比之前的值大了4。 Gdb的使用切記點: · 在Gcc編譯選項中一定要加入”-g”。 · 只有在代碼處於“運行”或“暫停”狀態時才能查看變量值。 · 設置斷點后程序在指定行之前停止。 |