Linux下GDB除錯簡介
阿新 • • 發佈:2018-12-10
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函式打斷點
未完待續