【问题标题】:Debugging with GDB over several processes在多个进程中使用 GDB 进行调试
【发布时间】:2026-01-14 22:00:01
【问题描述】:

在不涉及太多细节的情况下,我正在开发一个程序,该程序由几个单独的进程组成,所有进程都在嵌入式 QNX RTOS 上运行。它们没有父子关系,都是使用spawnlp(P_NOWAIT, ...)生成的,并且都使用操作系统提供的IPC机制相互通信。

当我使用 GDB 进行调试时,我在正在处理的进程中遇到了断点,我的所有线程都被暂停了,这很棒。但是有没有办法让它暂停我的 other 进程的执行?现在正在发生的事情是,当我的进程暂停时,所有其他进程都在继续运行,因此所有 IPC 队列都已满等等。

提前致谢,

高频

【问题讨论】:

  • 我不确定它们是否仍与当前的 gdb 进程相关联。

标签: gdb qnx-neutrino multiple-processes


【解决方案1】:

您可以将 GDB 命令列表与每个断点相关联。因此,当您在进程 A 中遇到断点时,您可以发送一个 SIGTRAP 到进程 B,它应该将其放入调试器中:

(gdb) b main
Breakpoint 1 at 0x804834a: file testA.c, line 40.
(gdb) command
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>shell kill -s TRAP `pidof testB`
>end
(gdb) 

更多信息Breakpoint Command Lists

【讨论】:

  • 我认为可能会这样做,它可能不会在断点被击中时完全停止其他进程,但应该足够快地停止它们以防止 IPCt 队列填满