1. 程式人生 > 其它 >linux下gdb除錯

linux下gdb除錯

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的執行緒

參考連結linux下gdb除錯方法與技巧整理_niyaozuozuihao的部落格-CSDN部落格_gdb除錯