c/c++语言开发共享在eclipse cdt中调试fork()

我正在尝试使用eclipse cdt(Juno)调试一些fork()机制。 我用C编写了程序。

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.当我进入wait语句时,调试器立即返回,是不是wait()假设暂停直到子进程返回? 为什么会立即返回?

    你的问题可能是由于“分离分叉”被设置为关闭。 DSF默认设置它(它也是gdb的默认值)。

    1)在“execlp …”和“returnedpid = …”的行上放置一个断点。 2)在调试配置中启用“非停止模式”和“自动调试分叉进程”。 3)启动调试会话。 您将在孩子或父母中遇到断点。 现在看看调试视图。

    在eclipse cdt中调试fork()

    你会注意到你的二进制显示两个线程。

    4)单击其中一个(上图中带有main()的行)以切换调试上下文。

    这可能是因为init进程在你等待之前收获了孩子。 在进入fork时尝试阻止sigchld,然后在你的forks / execs之后解锁信号。 也许这应该会让你知道究竟发生了什么。

    使用sigprocmask应该可以帮到你。

      以上就是c/c++开发分享在eclipse cdt中调试fork()相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560568.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐