2017-03-07 60 views
1

我啓動gdb如下:gdb --args parentExecutable LotsOfArgsForParentGDB運行命令啓動子進程,而不是父

我也跑:set follow-fork-mode child

parentExecutable在某些時候叉,並與一些參數執行childExecutable 。我調試了一會兒。然後,我使用gdb的運行命令重新啓動parentExecutable,並使用在開頭給出的參數。然而,相反,孩子可執行文件重新啓動 - 從頭開始​​,沒有任何參數。我怎樣才能讓gdb用開頭提供的參數來啓動父進程?

+0

我猜測了一下,但我期望它是因爲它是活躍的過程。嘗試命令「info inferiors」列出正在調試的進程,然後輸入「inferior n」以使父進程成爲活動/選定進程。然後我希望跑步重新開始,但我敢打賭它不會殺死孩子。 – joeking

回答

1

實際上有兩個模式要注意在這種情況下。一種模式是follow-fork-mode,它告訴gdb下次分岔時該怎麼做。但是,也有follow-exec-mode,它告訴gdb如何處理exec調用。

follow-exec-mode爲默認設置是same,它告訴gdb來重用當前的劣勢爲exec'd過程。在這種情況下,一旦孩子進程停止,run將重新運行孩子。

你想要的是set follow-exec-mode new。在這種模式下,gdb會響應exec來做出新的劣勢。然後,當您想要重新運行原始可執行文件時,可以切換回第一個劣勢(使用info inferior獲取一個列表,使用inferior命令選擇一個)。然後run將重新運行原始。

完成這一切的另一種方法是使用set detach-on-fork off進行多次調試。不過,以我的經驗來看,這種模式還是有點片面的。但是,一旦它起作用,我認爲這將是首選方法。

相關問題