【问题标题】:How to debug a forked child process using CLion如何使用 CLion 调试分叉的子进程
【发布时间】:2023-04-05 08:30:01
【问题描述】:

我正在使用 CLion 的内部调试器(Linux 上的 gdb)调试 Linux C 程序。该程序派生了一个子进程,该子进程应该在我设置的断点处暂停。但是即使我在 gdb 面板中输入了set follow-fork-mode child,调试器也没有停止。那么我怎样才能用 CLion 做到这一点呢?

【问题讨论】:

标签: c linux clion


【解决方案1】:

我关注了@MarkusParker 发布的answer,但我使用set detach-on-fork off 而不是set detach-on-fork off 来防止与子进程断开连接。这个指令对我有用:

  1. 在程序开头设置断点(即父程序,而不是子程序)。

  2. 在调试器中启动程序。

  3. 转到 clion 中的调试器控制台(标签为 gdb 的选项卡)并输入 set follow-fork-mode childset detach-on-fork off

  4. 继续调试。

【讨论】:

    【解决方案2】:

    使用调试器的 GDB 选项卡:

    进入 set follow-fork-mode child 并设置 detach-on-fork off

    【讨论】:

      【解决方案3】:

      根据此链接debugger: Support multi-process targets Clion 仍然不支持它。 set detach-on-fork off 会在框架中添加一个线程,但是你仍然无法控制子进程。和克利昂 “即使其他人仍在运行,也将其中一个劣等者的退出视为调试会话的结束”。

      我认为 vscode 也有同样的问题。

      【讨论】:

        【解决方案4】:

        确保在分叉之前设置set follow-fork-mode child

        【讨论】:

        • 我之前确认过这种方法,但它不起作用。这种方式只能通过命令行界面调试,不能在 CLion 内部调试。
        • 当 GDB 跟随子进程时,我遇到 CLion 断开远程调试会话。
        • @JaimeHablutzel 在这种情况下,您还需要set detach-on-fork off
        猜你喜欢
        • 2013-05-26
        • 2019-10-24
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 2017-02-26
        • 1970-01-01
        相关资源
        最近更新 更多