如何使用 CLion 调试分叉的子进程

How to debug a forked child process using CLion

我正在使用 CLion 的内部调试器(Linux 上的 gdb)调试 Linux C 程序。该程序分叉了一个应该在我设置的断点处暂停的子进程。但是即使我在 gdb 面板中输入 set follow-fork-mode child,调试器也不会停在那里。那么我如何使用 CLion 实现这一目标呢?

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

我遵循 posted by @MarkusParker, but instead of set auto-load safe-path / I used set detach-on-fork off 以防止与子进程断开连接。这条指令对我有用:

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

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

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

  4. 继续调试

使用调试器的 GDB 选项卡:

输入 set follow-fork-mode child 并关闭 detach-on-fork

根据这个 link debugger: Support multi-process targets Clion 仍然不支持它。 set detach-on-fork off 会在框架中添加一个线程,但你仍然无法控制子进程。和克里昂 “将下级之一的退出视为调试会话的结束 even-though 其他人仍然 运行”。

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