2013-11-23 125 views
1

我目前正在C中創建一個命令行應用程序,其中創建了許多子進程。所以我需要調試這個子代碼。我已經在Xcode上創建了一個子進程,如下所示。 (見破發點並運行光標。)命令行應用程序:如何將子進程附加到xcode調試器?

enter image description here

執行某個語句之後,我得到如下圖所示圖Xcode中GBN(885)連接到Xcode調試。

enter image description hereenter image description here

它不工作。我如何將子進程附加到xcode調試器?先謝謝你。

回答

3

谷歌和蘋果開發者頁面在這個問題上真的很沉默,最後我找到了一個很好的解決方法。當我們將Xcode調試器附加到正在調試的進程的子進程或正在由Xcode調試器,gdb或lldb調試的進程時,會出現此錯誤消息。

error message

爲了避免這種刺激性的消息,首先將要停止的子進程kill(0, SIGSTOP)聲明。在下圖中,我已將kill聲明放置在創建子項後。

enter image description here

二,使用gcc使用-g選項編譯源代碼。

$ ls 
GBN.1 gbn.c gbn.h type.h util.c util.h 
$ gcc *.c -g 
$ ./a.out 

[1]+ Stopped     ./a.out 
$ ps -ef | grep a.out 
    501 628 600 0 9:33AM ttys000 0:00.00 ./a.out 
    501 629 628 0 9:33AM ttys000 0:00.00 ./a.out 

現在,我們所要做的就是告訴Xcode調試器通過pid附加到進程。單擊Debug菜單,然後找到Attach to process選項以單擊By Process Identifier (PID) or name選項。然後鍵入子進程(或父進程)的pid,然後單擊附加按鈕。

enter image description here

享受調試!

enter image description here

+0

很好。我從來不會想到這一點。 – saulspatz

+1

稱這是一個「好」的解決方法是真正地擴展「好」的定義。我們有一個用Swift編寫的相當大的服務,具有外部依賴性,而不是一些只有'fork()'的雙C文件演示程序。將一個SIGSTOP放入調試對象中並不是一個完整的非啓動器,但當我們試圖調試運輸代碼時真的很痛苦。此外,這不會幫助調試由於在父母準備好之前孩子做了某些事情的種族情況而導致的崩潰;孩子恢復比賽的時間將會持續很久。 – CBHacking

相關問題