使用 GDB 调试多进程程序

4
不详细介绍,我正在开发一个程序,由几个独立的进程组成,所有进程都在嵌入式QNX RTOS上运行。它们没有父子关系,都是使用spawnlp(P_NOWAIT, ...)生成的,并且它们都使用操作系统提供的IPC机制进行通信。
当我使用GDB进行调试并在我正在工作的进程中触发断点时,所有线程都会暂停,这很好。但是是否有一种方法也可以暂停我的其他进程的执行呢?目前的情况是,当我的进程暂停时,所有其他进程都在继续运行,因此所有IPC队列都被填满等等。
谢谢。

我不确定它们是否仍与当前的gdb进程关联。 - ravi
1个回答

1
您可以将一组GDB命令与每个断点相关联。因此,当您在进程A中触发断点时,您可以向进程B发送SIGTRAP信号,这应该会将其转入调试器:
(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) 

更多信息请参阅断点命令列表

我认为这可能会做到,它可能不会在断点被触发时完全停止其他进程,但应该足够快地停止它们,以防止IPC队列填满。 - Harley Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接