Tôi đang cố gắng gỡ lỗi một số cơ chế fork() với eclipse cdt (Juno). tôi đã viết chương trình trong C.Gỡ lỗi fork() trong eclipse 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;
}
Tôi cố gắng thêm "set follow-fork-mode child
" như đã nói ở đây: http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2006-02/msg00435.html
1. Làm thế nào tôi có thể gỡ lỗi phần mã nơi (0==pid)
?
2. Khi tôi nhận được câu lệnh chờ, trình gỡ lỗi chỉ trở lại ngay lập tức, không phải là chờ() giả sử tạm dừng cho đến khi trẻ trở về? Tại sao nó trở lại ngay lập tức?
Hi dbrank0. Tôi theo ví dụ của bạn và tìm thấy nó làm việc (nhưng bạn cần phải buộc "Tự động gỡ lỗi quá trình phân nhánh" tùy chọn) nhưng với một vấn đề anyway. Tôi là "daemonizing" quá trình của tôi như vậy, theo chỉ dẫn rất kinh nghiệm, tôi đang cố gắng hai lần. Dường như với tôi rằng ngã ba đầu tiên được theo đúng cách nhưng ngay sau khi tôi cố gắng để ngã ba lần thứ hai toàn bộ trình gỡ lỗi bị treo và tôi không thể làm theo không ai trong số hai quy trình. cảm ơn anyway nhưng ... bất kỳ ý tưởng? –
Không, xin lỗi, nhưng hãy xem nếu có bất kỳ thiết bị chuyển mạch được giải thích trong chương "gỡ lỗi dĩa" (https://sourceware.org/gdb/onlinedocs/gdb/Forks.html) giúp. – dbrank0
Hoạt động hoàn hảo, ngay cả sau execvp (hoán đổi quá trình mới) sau ngã ba. Tốt đẹp. –