gdb常用命令表
backtrace(或bt):檢視各級函式呼叫及引數
finish:連續執行到當前函式返回為止,然後停下來等待命令
frame(或f):幀編號,選擇棧幀
info(或i):locals檢視當前棧幀區域性變數的值
list(或l):列出源**,接著上次的位置往下列,每次列10行
list行號:列出從第幾行開始的源**
list函式名:列出某個函式的源**
print(或p):列印表示式的值,通過表示式可以修改變數的值或者呼叫函式
quit(或q):退出gdb除錯函式
set var:修改變數的值
start:開始執行程式,停在main函式第一行語句前面等待命令
gdb與程序
#include#include#include#include#includeint main()
else if (id == 0)
else
return 0;
}
follow-fork-mode detach-on-fork
parent on 只除錯主程序(gdb預設)
child on 只除錯子程序
parent off 同時除錯兩個程序,gdb跟主程序,子程序block(阻塞)在fork位置
child off 同時除錯兩個程序,gdb跟子程序,主程序block在fork位置
設定方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]
顯示方法:
show follow-fork-mode ;
show detach-on-fork;
查詢正在除錯的程序
:info inferiors
顯示gdb除錯的所有inferior,gdb會為他們分配id。其中帶有*的程序是正在除錯的inferior.
( gdb將每乙個被除錯程式的執行狀態記錄在乙個名為inferior的結構中。一般情況下乙個inferior對應乙個程序,每個不同的inferior有不同的位址空間。inferior有時候會在程序沒有啟動的時候就存在。)
切換除錯的程序:inferior
切換到id是num的inferior進行除錯。
新增新的除錯程序: add-inferior [-copies n] [-exec executable] ,可以用file executable來分配給inferior可執行檔案。
增加n個inferior並執行程式為executable。如果不指定n只增加乙個inferior。如果不指定executable,則執行程式留空,增加後可使用file命令重新指定執行程式。這時候建立的inferior其關聯的程序並沒啟動。
remove-inferiors infno:
刪除乙個infno號的inferior。如果inferior正在執行,則不能刪除,所以刪除前需要先kill或者detach這個inferior。
detach inferior:
detach掉編號是infno的inferior。注意這個inferior還存在,可以再次用run命令執行它。
kill inferior infno:
kill掉infno號inferior。注意這個inferior仍然存在,可以再次用run等命令執行它。
gdb與多執行緒
#include#includevoid* thread_run1()
void* thread_run2()
int main()
程式設計時,當我們需要除錯時,有時需要控制某些執行緒停在斷點,有些執行緒繼續執行。有時需要控制線程的執行順序。有時需要中斷某個執行緒,切換到其他執行緒。這都可以通過gdb實現。
gdb預設支援除錯
,跟主線程,子執行緒block在create thread。
先來看一下gdb除錯多執行緒常用命令:
info threads:顯示可以除錯的所有執行緒。gdb會為每個執行緒分配乙個id(和tid不同),編號一般從1開始。後面的id是指這個id。
thread id:切換當前除錯的執行緒為指定id的執行緒。
break filename.cpp:linunum thread all:
所有執行緒都在檔案filename.cpp的第linenum行有斷點。
多個執行緒執行gdb命令command。
:所有執行緒都執行command命令。
set scheduler-locking off|on|step:
在調式某乙個執行緒時,其他執行緒是否執行。off,不鎖定任何執行緒,預設值。on,鎖定其他執行緒,只有當前執行緒執行。step,在step(單步)時,只有被除錯執行緒執行。
set non-stop on/off:
當調式乙個執行緒時,其他執行緒是否執行。
set pagination on/off
:在使用backtrace時,在分頁時是否停止。
set target-async on/ff
:同步和非同步。同步,gdb在輸出提示符之前等待程式報告一些執行緒已經終止的資訊。而非同步的則是直接返回。
gdb除錯多程序多執行緒
1.除錯多程序預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb v7.0 支援多程序的 分別以及同時 除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow fork mode 預設值 parent 和detach on fork 預設值 on 即可。接下來,首先介紹一下f...
gdb除錯多程序多執行緒
gdb是非常強大的unix及unix like下的程式除錯工具 gdb的使用 r或run 執行程式。list l 行號 顯示檔案源 接著上次的位置往下列,每次列10行。list l 函式名 列出某個函式的源 s或step 進入函式呼叫 breaktrace 或bt 檢視各級函式調 用及引數 info...
GDB 除錯多執行緒多程序
gdb是linux下的除錯利器,在c c 程式開發過程中必不可少的。這裡總結一下多程序和多執行緒的除錯方法和技巧。多程序的除錯 如下示例 include include include include include include static int glob 23 void test int ...