1. 程式人生 > >Linux下GDB除錯簡介

Linux下GDB除錯簡介

Linux下C/C++除錯工具gdb簡介

GDB(GNU Debugger)是Linux下的一個除錯工具,具體的功能有: - 設定斷點,使得程式碼在制定行暫停執行; - 單步除錯程式; - 檢視程式中的變數值的變化; - 動態改變程式的執行環境; - 分析崩潰程式產生的core檔案;

假設我們有原始檔hello.c,要使用GDB進行除錯,在程式編譯時就必須使用-g或者-gdb選項:

gcc -Wall -g hello.c -o hello

-Wall選項使得gcc儘可能產生多的告警資訊, 然後使用命令:

gdb hello

接下來就可以進行除錯了,除錯的視窗:

GNU gdb (Ubuntu 7.11
.1-0ubuntu1~16.5) 7.11.1 ... //沒有全部複製 Reading symbols from simple_gdb...done. (gdb) //這裡就可以輸入除錯命令

常見的除錯命令有:

File            //裝入想要除錯的可執行檔案
run             //執行當前被除錯的程式
kill            //終止除錯程式
step            //執行一行原始碼進入函式內部
next            //執行一行原始碼不進入函式內部
break           //設定斷點後,程式會在這裡被掛起
print           //列印變數或者表示式的值
display //設定自動顯示的變數或者表示式 list //列出可執行檔案的原始碼的一部分 quit //退出gdb程式 watch //監視一個變數的值 backtrace //回溯跟蹤 frame n //定位到錯誤行,n為輸出結果中的行號 examine //檢視記憶體地址的值 jump //使程式跳轉執行 signal //產生訊號量 return //強制函式返回 call //強制呼叫函式 make //使使用者不退出gdb就重新生成可執行檔案
shell //使使用者不離開gdb就執行Linux命令

1. 斷點除錯

使用break設定斷點,常見的命令如下:

break [function]    //在指定函式中停住,對於C++的類/過載函式,可以使用class::function或者function(type...)格式指定對應函式
break [linenum]     //在指定行號停住
break +[offset]       //在本行號前面offset停住
break -[offset]
break [filename:linenum]
break [filename:function]
break [*address]      //在執行的記憶體地址處停住
break       //在下一條指令處停住
break [...] if<condition>     //在條件成立是停住

例如:

break main      //在main函式打斷點

未完待續

主要參考自《精通Linux C程式設計》程國剛 編著