GDB除錯多程序與多執行緒

2021-09-28 07:22:44 字數 2291 閱讀 3565

gdb除錯過程中常用命令:

list/l 行號:顯示binfile源**,接著上次的位置往下列,每次列10行。

list/l 函式名:列出某個函式的源**。

r或run:執行程式。

s或step:進入函式呼叫

breaktrace(bt):檢視各級函式呼叫及引數

info(i) locals:檢視當前棧幀區域性變數的值

info break :檢視斷點資訊。

finish:執行到當前函式返回,然後停下來等待命令

print(p):列印表示式的值,通過表示式可以修改變數的值或者呼叫函式

set var:修改變數的值

quit:退出gdb

break(b) 行號:在某一行設定斷點

break 函式名:在某個函式開頭設定斷點

continue(或c):從當前位置開始連續而非單步執行程式

run(或r):從開始連續而非單步執行程式

delete breakpoints:刪除所有斷點

delete breakpoints n:刪除序號為n的斷點

disable breakpoints:禁用斷點

enable breakpoints:啟用斷點

info(或i) breakpoints:參看當前設定了哪些斷點

display 變數名:跟蹤檢視乙個變數,每次停下來都顯示它的值

undisplay:取消對先前設定的那些變數的跟蹤

until x行號:跳至x行

p 變數:列印變數值

n 或 next:單條執行

gdb除錯多程序:

#include #include #include #include int main()

else if(pid == 0)

else

return 0;

}

預設條件下,在除錯多程序時gdb只會除錯主程序,可以進行設定

follow-fork-mode(預設:parent)

detach-on-fork(預設:on)

follow-fork-mode detach-on-fork 說明:

parent       on            只除錯主程序(gdb預設)

child on 只除錯子程序

parent off 同時除錯兩個程序,gdb跟主程序,子程序block在fork位置

child off 同時除錯兩個程序,gdb跟子程序,主程序block在fork位置

1> 設定child off

2> 在主程序與子程序處打斷點

3> 執行r

info inferiors

顯示gdb除錯的所有inferior,gdb會為他們分配id。其中帶有*的程序是正在除錯的inferior。( gdb將每乙個被除錯程式的執行狀態記錄在乙個名為inferior的結構中。一般情況下乙個inferior對應乙個程序,每個不同的inferior有不同的位址空間。inferior有時候會在程序沒有啟動的時候就存在。)

4> 切換除錯的程序

gdb除錯多執行緒:

2> 檢視執行緒

參考:

gdb除錯多程序與多執行緒

gdb是linux下的 除錯工具,在使用時要加 g選項,開始 gdb file 退出 ctrl d或q。gdb除錯多程序與多執行緒預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb v7.0 支援多程序的分別以及同時除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow fo...

gdb除錯多程序與多執行緒

list l 行號 顯示binfile源 接著上次的位置往下列,每次列10行。list l 函式名 列出某個函式的源 r或run 執行程式。s或step 進入函式呼叫 breaktrace bt 檢視各級函式呼叫及引數 info i locals 檢視當前棧幀區域性變數的值 info break 檢...

gdb除錯多程序多執行緒

1.除錯多程序預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb v7.0 支援多程序的 分別以及同時 除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow fork mode 預設值 parent 和detach on fork 預設值 on 即可。接下來,首先介紹一下f...