1. linux下gdb除錯常用命令
在除錯前明確:在生成源**的時候加上 -g 選項,開始使用: gdb binfile,退出: ctrl + d 或 quit。下面是除錯的常用命令。
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行
n 或 next:單條執行
p 變數:列印變數值
2. 除錯多程序
1)除錯**
#include
#include
int main()
if(id == 0)
else
return
0;}
2)測試方法預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb(>v7.0)支援多程序的分別以及同時除錯,gdb可以同時除錯多個程式。需要設定follow-fork-mode(預設為parent)和detach-on-fork(預設為on),下面為兩者的介紹。
follow-fork-mode
detach-on-fork
除錯位置
parent
on僅主程式
child
on僅子程式
parent
off同時除錯兩個程序,gdb隨主程序,子程序阻塞在fork位置
child
off同時除錯兩個程序,gdb隨子程序,主程序阻塞在fork位置
開啟方法 set follow-fork-mode parent/child set detach-on-fork on/off
程序間切換:info inferiors(inferiors記錄被除錯程式的執行狀態)用來檢視所有程序,帶*為正在除錯的程序。inferior + 程序號,可以切換正在除錯的程序。
新增新的除錯程序:add-inferior [-copies n] [-exec executable]。 新增新的除錯程序,可以用file executable來分配給inferior可執行檔案。增加n個inferior並執行程式為executable。如果不指定n只增加乙個inferior。如果不指定executable,則執行程式留空,增加後可使用file命令重新指定執行程式。
刪除乙個除錯程序:首先通過detach inferior(detach掉編號為infno的inferior) 或者kill inferior infno:(kill掉編號為infno的inferior),此時並沒有刪掉inferior。最後通過remove-inferiors infno刪除編號為infno的inferior。
3. 多執行緒的除錯
gdb除錯多執行緒常用命令
多程序 多執行緒除錯
啟動gdb除錯 gdb jccc 設定預設跟蹤子程序 gdb set follow fork mode child 設定當程式在gdb中停止,只有當前的執行緒會被停止,而其他的執行緒將會繼續執行 gdb預設程序的所有執行緒都會停止 gdb set non stop on 接下來設定斷點 gdb b ...
多程序 多執行緒除錯
一 執行緒除錯 程序啟動執行緒,是可以使用od除錯到執行緒中去的 是在waitforsingleobject這裡,之後就是cpu調到執行緒中去了,我們只需要在createthread 中的執行緒函式中下斷點就能斷下來 二 程序除錯 2.1 od除錯時,是不會調到新程序中 關鍵函式 createpro...
eclipse下的多執行緒和多程序除錯
eclipse debug 多執行緒 1,如何除錯linux子程序 要在eclipse cdt中除錯子程序,可以通過啟用follow fork mode來實現。在當前專案工作目錄下建乙個.gdbinit檔案,裡面加入下面語句 set follow fork mode child 然後在子程序的 入口...