1
. 預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb(>v7.0)支援多程序的
分別以及同時
除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow-fork-mode(預設值:parent)和detach-on-fork(預設值:on)即可。
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後設定:set folow-fork-mode child set detch-on-fork off
查詢正在除錯的程序:info inferiors
切換除錯的程序: inferior
新增新的除錯程序: add-inferior [-copies n] [-exec executable] ,可以用file executable來分配給inferior可執行檔案。
其他:remove-inferiors infno, detach inferior
2. gdb預設支援除錯多執行緒,跟主線程,子執行緒block在create thread。
查詢執行緒:info threads
切換除錯執行緒:thread
3
#include #include #include #include int main()
else
return 0;
}
執行結果:
gdb除錯:
1. g++ -g -gstabs+ -o fork fork.cpp
2. gdb fork
3. set folow-fork-mode child set detach-on-fork off
4. catch fork
5.r6.在子程序中設定斷點: b 11
7.info inferiris :
(gdb) info inferior
num description executable
* 2 process 6666 /home/syswj/test_syscall/fork
1 process 6663 /home/syswj/test_syscall/fork
8.inferior 1:切換到父程序
9.b 16 : 設定斷點
10.cont
11.info inferiors :
(gdb) info inferiors
num description executable
2 process 6666 /home/syswj/test_syscall/fork
* 1 process 6663 /home/syswj/test_syscall/fork
-- >在父子程序中切換除錯
多個程序:
gdb除錯多程序程式
1.gdb下除錯多程序程式只需要以下幾條命令即可 除此之外還可以檢視正在除錯的程序 info inferiors,同時也可以將當前正在除錯的程序切換到另外乙個程序中讓其取執行 2.除錯演示 include include includevoid father process void child p...
gdb多程序除錯
使用gdb最好的文件就是其名為 debugging with gdb 的參考手冊。手冊中有一小章節提到了如何除錯多程序程式。一般情況下,如果被gdb除錯的程式中呼叫fork派生出乙個新的子程序,這時gdb除錯的仍然還是父程序,其子程序的執行不被理會。如果之前你在子程序的執行routine上設定了斷點...
gdb除錯多程序
在大多數系統,gdb對使用fork建立的程序沒有進行特別的支援。當父程序使用fork建立子程序,gdb仍然只會除錯父程序,而子程序沒有得到控制和除錯。這個時候,如果你在子程序執行到的 中設定了斷點,那麼當子程序執行到這個斷點的時候,會產生乙個sigtrap的訊號,如果沒有對此訊號進行捕捉處理,就會按...