我目前正在C中創建一個命令行應用程序,其中創建了許多子進程。所以我需要調試這個子代碼。我已經在Xcode上創建了一個子進程,如下所示。 (見破發點並運行光標。)命令行應用程序:如何將子進程附加到xcode調試器?
執行某個語句之後,我得到如下圖所示圖Xcode中GBN(885)連接到Xcode調試。
它不工作。我如何將子進程附加到xcode調試器?先謝謝你。
我目前正在C中創建一個命令行應用程序,其中創建了許多子進程。所以我需要調試這個子代碼。我已經在Xcode上創建了一個子進程,如下所示。 (見破發點並運行光標。)命令行應用程序:如何將子進程附加到xcode調試器?
執行某個語句之後,我得到如下圖所示圖Xcode中GBN(885)連接到Xcode調試。
它不工作。我如何將子進程附加到xcode調試器?先謝謝你。
谷歌和蘋果開發者頁面在這個問題上真的很沉默,最後我找到了一個很好的解決方法。當我們將Xcode調試器附加到正在調試的進程的子進程或正在由Xcode調試器,gdb或lldb調試的進程時,會出現此錯誤消息。
爲了避免這種刺激性的消息,首先將要停止的子進程kill(0, SIGSTOP)
聲明。在下圖中,我已將kill
聲明放置在創建子項後。
二,使用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,然後單擊附加按鈕。
享受調試!
很好。我從來不會想到這一點。 – saulspatz
稱這是一個「好」的解決方法是真正地擴展「好」的定義。我們有一個用Swift編寫的相當大的服務,具有外部依賴性,而不是一些只有'fork()'的雙C文件演示程序。將一個SIGSTOP放入調試對象中並不是一個完整的非啓動器,但當我們試圖調試運輸代碼時真的很痛苦。此外,這不會幫助調試由於在父母準備好之前孩子做了某些事情的種族情況而導致的崩潰;孩子恢復比賽的時間將會持續很久。 – CBHacking