linux下gdb除錯
阿新 • • 發佈:2021-07-29
gdb是Linux作業系統下基於命令列的程式除錯工具。
以C++為例,測試程式為test.cpp,通過makefile或者命令gcc生成可執行檔案test:
//-g為了除錯用的 ,加個-g 是為了gdb 用,不然gdb用不到 //-o output_filename,確定輸出檔案的名稱為output_filename,不能和原始檔同名 //-c 只編譯不連結,生成目標檔案而不是可執行檔案 gcc -g test.cpp -o test
啟動gdb:
gdb test//不列印gdb版本資訊 gdb -q test//列印gdb版本資訊
檢視程式碼:l(list),預設顯示10行,按回車鍵繼續檢視;
執行程式:r(run),執行程式直到結束或遇到斷點
c(continue),繼續執行程式,直到下一個斷點或者結束
設定斷點:b(break) xxx,在第xxx行設定斷點
delete n:刪除斷點編號為n的斷點
info breakpoints,顯示斷點資訊
(gdb) info breakpoints //Num:斷點編號 //Disp:斷點執行一次之後是否有效 kep:有效 dis:無效 //Enb: 當前斷點是否有效 y:有效 n:無效 //Address:記憶體地址 //What:位置 Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004030d0 in main(int, char**) at test.cpp:62
單步執行:n(next),單步執行程式,但是遇到函式時不進入函式
s(step),單步執行程式,但是遇到函式會進入函式
退出gdb:q(quit),退出gdb除錯
檢視執行資訊:info program,來檢視程式的是否在執行
bt,顯示當前執行的堆疊列表
set args xxx,指定執行時的引數為xxx
show args:檢視設定好的引數
多程序/多執行緒除錯:attach pid,將PID為pid的程序附加到gdb偵錯程式上(除錯該程序)
info threads,顯示當前可以除錯的所有執行緒
thread id,除錯ID為id的執行緒