我试图用eclipse cdt(Juno)调试一些fork()机制。 我在C.在eclipse中调试fork()cdt
if(-1 == (pid = fork())) /* error */
goto cleanup;
else if (0 == pid) /* child */
{
execlp("gcc", "gcc", cFilePath, "-o" , GCC_OUTPUT_FILE_NAME, NULL);
goto cleanup; /* Arrives here only on error! */
}
else if (pid > 0) /* parent - checks: correct pid returns, returns normally, with exit status = 0*/
{
returnedpid = wait(exitStatus);
if(pid != returnedpid || exitStatus == NULL || !WIFEXITED(*exitStatus) || !WEXITSTATUS(*exitStatus))
goto cleanup;
}
编写的程序我尝试添加“set follow-fork-mode child
”这里说:http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2006-02/msg00435.html
1.我如何调试代码部分,其中(0==pid)
?
2.当我到达等待语句时,调试器立即返回,是不是等待()假设暂停直到孩子返回?为什么它会立即返回?
嗨dbrank0。我遵循你的例子,并找到它的工作(但你需要强制“自动调试分叉进程”选项),但无论如何有问题。我正在“守护”我的过程,所以按照大师的指示,我分了两次。在我看来,第一个分支是正确的,但一旦我尝试第二次分叉整个调试器挂起,我不能跟随这两个过程。无论如何感谢,但...任何想法? – 2015-05-15 10:03:32
不,对不起,但看看“调试叉”一章(https://sourceware.org/gdb/onlinedocs/gdb/Forks.html)中解释的任何开关是否有帮助。 – dbrank0 2015-05-15 10:12:20
完美工作,甚至在fork之后执行execvp(swapn new process)。尼斯。 – 2016-03-31 13:56:07