2014-02-14 40 views
1

正如我的標題所說,我在調試多進程程序的源代碼時遇到了麻煩。 這是如下: 1.該程序被編寫爲守護進程,所以父/主進程是守護進程。 2.它分派了大量的子進程,大約5到7或8個進程。如何在eclipse中附加一個進程來調試多進程程序

我使用eclipse來開發我的代碼,並且我想從eclipse調試我的程序。 據我所知,調試器不知道子進程的斷點。

因此,我想知道,是否有任何選項可用來調試我的程序,包括子進程? 在eclipse中是否有任何設置可以附加子pid,以便調試器切換到該子進程?

如假設孩子4522,4562,5462。然後在調試期間,我可以附加調試器到5462嗎?

在此先感謝。

+0

有點相關。在幾年前爲Domino服務器編寫插件時,我完全不瞭解類似情況的解決方案。最終,我最終將fork代碼臨時更改爲double fork和execvp一個配置爲啓動gdb的xterm,並附加到我在初始fork上sl child的子進程。這是可怕的,但它非常有效地捕捉深藏在加載項中的故障。我想現在eclipse會有一個gdb的配置,在這個時候啓用調試子進程(那是12年前)。 – WhozCraig

+0

@WhozCraig感謝您的信息,是的,日食Kepler現在支持調試子進程,但是目前正如我試過的那樣,對於一個孩子是可能的。因爲我的程序是守護進程,所以我認爲這也是對eclipse的限制調試,但不是100%確定。 – pmverma

回答

3

請參閱gdb follow-fork-mode設置。使用此選項,您可以控制進程分叉時的gdb行爲。你可以從gdb控制檯設置它

gdb> set follow-fork-mode child 

所以在fork中gdb會切換到子進程。這裏另一個可能的值是遵循parent。如果你想從一個GDB調試會話他們兩個,使用此選項:

gdb> set detach-on-fork off 

這將使調試器中打開一個新的劣子進程。稍後,您可以像這樣在它們之間切換:

gdb> inferior 1 

另一種方法是從另一個gdb會話中附加一個新進程。

更新:我總是從控制檯使用gdb,所以我不知道eclipse中是否有任何gdb設置,也許別人會用gui選項來幫助你。如果你在eclipse中有一個gdb控制檯,你可以在這裏嘗試這個命令。

更新2:請參閱this link關於gdb fork選項。

+0

感謝您的gdb命令,我會嘗試發佈。 – pmverma

相關問題