我試圖用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