【发布时间】:2023-04-05 08:30:01
【问题描述】:
我正在使用 CLion 的内部调试器(Linux 上的 gdb)调试 Linux C 程序。该程序派生了一个子进程,该子进程应该在我设置的断点处暂停。但是即使我在 gdb 面板中输入了set follow-fork-mode child,调试器也没有停止。那么我怎样才能用 CLion 做到这一点呢?
【问题讨论】:
我正在使用 CLion 的内部调试器(Linux 上的 gdb)调试 Linux C 程序。该程序派生了一个子进程,该子进程应该在我设置的断点处暂停。但是即使我在 gdb 面板中输入了set follow-fork-mode child,调试器也没有停止。那么我怎样才能用 CLion 做到这一点呢?
【问题讨论】:
我关注了@MarkusParker 发布的answer,但我使用set detach-on-fork off 而不是set detach-on-fork off 来防止与子进程断开连接。这个指令对我有用:
在程序开头设置断点(即父程序,而不是子程序)。
在调试器中启动程序。
转到 clion 中的调试器控制台(标签为 gdb 的选项卡)并输入 set follow-fork-mode child 和 set detach-on-fork off。
继续调试。
【讨论】:
根据此链接debugger: Support multi-process targets
Clion 仍然不支持它。 set detach-on-fork off 会在框架中添加一个线程,但是你仍然无法控制子进程。和克利昂
“即使其他人仍在运行,也将其中一个劣等者的退出视为调试会话的结束”。
我认为 vscode 也有同样的问题。
【讨论】:
确保在分叉之前设置set follow-fork-mode child。
【讨论】:
set detach-on-fork off。