gdb除錯多程序

2022-10-10 06:39:08 字數 1921 閱讀 9347

gdb 預設設定是 parent,可用使用show follow-fork-mode 來查詢當前fork模式。

如果想要除錯子程序,進入gdb後設定

set follow-fork-mode child

然後再設定子程序裡的斷點,就可以除錯停到子程序。

使用follow-fork-mode,只能除錯乙個程序,不能同時除錯父子程序

on: 只除錯父程序或子程序的其中乙個(根據follow-fork-mode來決定),這是預設的模式。

off: 父、子程序都在gdb的控制之下,其中乙個程序正常除錯(根據follow-fork-mode來決定),另乙個程序會被設定為暫停狀態。

如果設定了set detach-on-fork off且follow-fork-mode為parent,fork後子程序並不執行,而是處於暫停狀態。

follow-fork-mod 意義:代表當前gdb跟隨著哪個程序在除錯

注意:follow-fork-mod預設情況下跟隨著主程序除錯(parent)

檢視當前gdb跟隨著哪個程序在除錯: show follow-fork-mode

設定gdb跟隨哪個程序除錯

set follow-fork-mode parent //設定gdb跟隨主程序除錯(預設)

set follow-fork-mode child //設定gdb跟隨著子程序除錯

detach-on-fork 意義:當前gdb除錯多程序的規則檢視gdb除錯多程序時的規則: 如果結果顯示on:代表除錯乙個程序,其他程序自動執行如果結果顯示off:代表除錯乙個程序,其他程序阻塞(處於等待狀態) show detach-on-fork 設定detach-on-fork: set detach-on-fork off

set detach-on-fork on //預設的

follow-fork-mod與detach-on-fork的組合 只除錯主程序,子程序自動執行 set follow-fork-mod parent set detach-on-fork on 只除錯子執行緒,主線程自動執行 set follow-fork-mod child set detach-on-fork on 同時除錯兩個程序,gdb跟隨著父程序,子程序處於等待狀態,在fork處 set follow-fork-mod parent set detach-on-fork off 同時除錯兩個程序,gdb跟隨著子程序,父程序處於等待狀態,在fork處 set follow-fork-mod child set detach-on-fork off

gdb除錯口訣技巧 如果只想要除錯父程序:在就父程序的**處打上斷點,然後follow-fork-mode 設為parent如果只想要除錯子程序:在就子程序的**處打上斷點,然後follow-fork-mode 設為childdetach-on-fork根據自己的需求而定

其他命令 檢視當前程式中正在除錯的程序: gdb會為這些程序分配inferiorid號,但是這個id號不是程序的pid顯示的資訊中,每乙個程序占用一行,如果有個id前面帶有「*」號,代表這個程序是gdb正在除錯的程序 info inferiors 切換gdb除錯的程序: id號不是ipd,而是gdb內的info inferiors顯示的id inferior 程序id號 徹底刪除乙個程序: 如果該程序正在執行,不能刪除。可以使用kill或者detach刪除這個程序 remove-inferiors 程序inferiorid 讓該程序detach掉,但是該程序還存在,還可以使用r來執行它: kill inferiors 程序inferiorid 下面的命令同上: detach inferiors 程序inferiorid

attach與detach的使用 當我們進入gdb對乙個程序除錯的時候: 如果想要掛接別的程序來除錯,就:attach pid如果想要取消這個掛接的程序,就:detach pid未進入gdb:如果想要對乙個程式指定的程序除錯,直接輸入:gdb attach pid

原文位址:

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