Linux 使用gdb除錯多程序 多執行緒

2021-07-27 19:53:29 字數 1118 閱讀 8727

gdb除錯多程序

多程序時,進入除錯狀態後,預設除錯主程序。

1. 查詢fork出子程序的**在第幾行,然後打上斷點。

2.執行至斷點處,info feriors可檢視當前除錯的程序

3.設定follow-fork-mode 的值為child,表示只除錯的子程序,再檢視當前除錯程序發現變成了新產生出來的程序,即子程序。follow-fork-mode(預設值是parent)和detach-on-fork(預設值是on)結合使用。4種組合的意義分別如下:

follow-fork-mode

detach-on-fork

說明parent

on只除錯父程序

child

on只除錯子程序

parent

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

child

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

所以我們set follow-fork-mode child ,detach-on-fork沒有設定,預設是on,即第二種使用場景,只除錯子程序。

4.可以使用inferior+程序編號(即info inferiors後顯示在第一列的號碼)來切換當前正在除錯的程序。

以上就是除錯多程序用到的命令。

gdb除錯多執行緒

scheduler-locking

意義on

當前除錯的執行緒單獨執行

off所有執行緒一起執行

step

沒有發生函式呼叫時單獨執行當前執行緒,有函式呼叫時所有執行緒一起執行

有關於多執行緒除錯的常用命令大概就是這些。

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會繼續除錯該程序,子程序會不受干擾地執行下去。如果你事...