標 題: [faq] 請問如何用gdb除錯子程序
發信站: bbs 水木清華站 (mon may 19 18:17:02 2003), 轉信
作個faq,在常見的x86平台上如何gdb除錯fork或者exec出來的子程序
1. 在fork語句上設定斷點,修改fork返回的值。這種做法並沒有真正去
觸動已經存在的子程序,而是強迫夫程序去走子程序的流程。對付簡單
情況都非常有效。
2. 修改源**,在fork後面,父程序和子程序中都加上while(debug_lock) sleep(1);
這樣的語句。fork後父程序detach,兩者就都可以attatch了,attatch後
set debug_lock = 0使得程式流程正常繼續。這種做法可以除錯子程序,
但是需要修改源**。
3. 如果你使用的gdb版本》= 6.0,考慮使用
(gdb) set follow-fork-mode
ask child parent
這裡修改
(gdb) set follow-fork-mode child
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會繼續除錯該程序,子程序會不受干擾地執行下去。如果你事...