gdb如何除錯多執行緒以及多程序

2021-07-27 11:46:40 字數 983 閱讀 4568

1.在大多數的作業系統中,gdb在除錯多程序時。當父程序使用fork建立出子程序,用gdb除錯時,gdb只會 父程序,對子程序沒有控制和除錯。如果你在子程序執行到**所設定的斷點處,會產生乙個sigtrap的訊號。如果沒有對此訊號進行訊號捕捉處理,就會預設的處理———終止程序。

2.  如果這樣的話我們可以建立在建立子程序時,先將函式等待一段時間再執行,在這段時間找到該程序,使用attach將程序附加到gdb中,從而達到除錯子程序的目的。

3.預設情況下除錯時只會除錯父程序,不會除錯子程序,因為我們的follow-fork-mode mode來設定fork跟隨模式。

mode的引數我們預設的是parent。

而mode的引數有幾種。

parent:gdb只跟蹤父程序,不跟蹤子程序。(預設模式)

child:gdb在子程序產生以後只跟蹤子程序,放棄對父程序的跟蹤。

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]

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 ...