Linux下多程序多執行緒的除錯

2021-09-30 13:39:45 字數 2371 閱讀 6880

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 然後在子程序的 入口...