GDB服务器 - 如何从多台机器上附加多个进程?

时间:2017-10-05 07:42:16

标签: process gdb

所以我打算使用一个名为ROS的框架为新机器人编写软件。在ROS框架下,每个软件组件都作为一个单独的进程运行。此外,由于ROS旨在通过TCP消息共享同时在多台计算机上运行,​​因此我的设置将涉及多台计算机上的多个进程。

现在我希望能够运行gdb服务器并附加每台机器的所有进程,这样当我达到一个断点时,我可以暂停所有进程。

查看gdb的文档: https://sourceware.org/gdb/onlinedocs/gdb/Server.html

详细说明您可以通过以下命令将多个进程附加到gdb服务器:

gdbserver --attach comm pid

但是,在运行gdb服务器的计算机上,您将无法在其他计算机上运行进程的pid。您如何将多个进程从不同的机器连接到同一个gdb服务器?如果不可能的话,您将如何设置多个gdb服务器并让它们相互通信,以便一个暂停暂停其他服务器?

2 个答案:

答案 0 :(得分:2)

目前无法做到这一点 - gdb一次只能连接到一个远程目标。该领域的工作正在进行中;它被称为“multi target”项目。那个维基页面有点过时了;其他人已经完成了工作,但没有更新页面。

答案 1 :(得分:1)

  

现在我希望能够运行gdb服务器并附加每台机器的所有进程,这样当我达到一个断点时,我可以暂停所有进程。

除了这种不可能性(如Tom Tromey的回答),它也不可行 - 一次调试超过2-3个进程是不可能的(你说的是10s或者这里的过程),即使有可能,你的进程(在不同的主机上运行)也不会全部“立刻”停止 - 会有一些延迟。只要有100毫秒或更长的延迟,您也可以让这些进程不停地运行,并且只在必要时手动停止并附加它们。

最后,许多ROS进程可能会有定时器和断言“自上次定时器以来没有太多时间”,等等。用GDB调试这样的进程变得不可行:你停止它们一次,环顾四周,继续它们立即断言系统没有按设计执行(并崩溃)。