2013-11-23 82 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

相关问题