筆記 gdb除錯多程序

2021-08-19 10:19:39 字數 1585 閱讀 5879

預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb(>v7.0)支援多程序的分別以及同時除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow-fork-mode(預設值:parent)和detach-on-fork(預設值:on)即可。

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

follow-fork-mode

detach-on-fork

說明parent

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

child

on只除錯子程序

parent

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

child

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

#include 

#include

int main()

else

if(id == 0)

}else

}return

0;}

首先我們檢視系統預設的follow-fork-mode 和 detach-on-fork:

由圖可以得出此時是只除錯主程序的。(也就是我們的父程序)

接下來我們設定一下follow-fork-mode 和 detach-on-fork:

此時設定以後,可同時除錯兩個程序:gdb跟主程序,子程序block在fork位置

//顯示gdb除錯的所有inferior,gdb會為他們分配id。

info inferiors

//其中帶有*的程序是正在除錯的inferior。

//gdb將每乙個被除錯程式的執行狀態記錄在乙個名為inferior的結構中。

//inferior有時候會在程序沒有啟動的時候就存在。

//切換除錯的程序

除錯子程序

除錯父程序

gdb多程序除錯

使用gdb最好的文件就是其名為 debugging with gdb 的參考手冊。手冊中有一小章節提到了如何除錯多程序程式。一般情況下,如果被gdb除錯的程式中呼叫fork派生出乙個新的子程序,這時gdb除錯的仍然還是父程序,其子程序的執行不被理會。如果之前你在子程序的執行routine上設定了斷點...

gdb除錯多程序

在大多數系統,gdb對使用fork建立的程序沒有進行特別的支援。當父程序使用fork建立子程序,gdb仍然只會除錯父程序,而子程序沒有得到控制和除錯。這個時候,如果你在子程序執行到的 中設定了斷點,那麼當子程序執行到這個斷點的時候,會產生乙個sigtrap的訊號,如果沒有對此訊號進行捕捉處理,就會按...

gdb除錯多程序

gdb 是 linux 系統上常用的 c c 除錯工具,功能十分強大。對於較為複雜的系統,比如多程序系統,如何使用 gdb 除錯呢?實際上,gdb 沒有對多程序程式除錯提供直接支援。例如,使用gdb除錯某個程序,如果該程序fork了子程序,gdb會繼續除錯該程序,子程序會不受干擾地執行下去。如果你事...