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

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

问题描述:

所以我打算使用一个名为ROS的框架为新机器人编写软件。在ROS框架下,它将每个软件组件作为一个独立的进程运行。此外,由于ROS旨在通过TCP信息共享一次在多台机器上工作,因此我的设置将涉及多台机器上的多个进程。GDB服务器 - 如何附加多台机器上的多个进程?

现在我希望能够运行gdb服务器并附加来自每台机器的所有进程,以便在打到中断点时暂停所有进程。

纵观机制的文档的GDB: https://sourceware.org/gdb/onlinedocs/gdb/Server.html

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

gdbserver的--attach通讯PID

然而,运行gdb服务器的机器,您将不会有其他机器上运行的进程的pid。你会如何将不同机器上的多个进程连接到同一台gdb服务器上?如果这是不可能的,你将如何设置多个gdb服务器并让它们彼此通信,以便一个挂起挂起其他人?

目前无法完成--gdb一次只能连接到一个远程目标。这方面的工作正在进行中;它被称为“multi target”项目。该wiki页面有点过时;别人已经拿起工作,但没有更新页面。

+0

顺便说一下,在最新的GNU Cauldron上有一个关于这个问题的演讲。幻灯片:https://gcc.gnu.org/wiki/cauldron2017?action=AttachFile&do=view&target=GDB+%26+Multi-target.pdf;视频:https://slideslive.com/38902683/the-gdb-bof-gdb-multitarget –

现在我希望能够运行GDB服务器,并从每台机器连接的所有进程,这样当我打了一个破发点,我可以暂停所有进程。

除了这个(汤姆Tromey回答)是不可能的,这也是不可行 - 它不是人力所能一次调试超过2-3进程(你在这里说话10S或进程),即使可能,您的进程(运行在不同的主机上)也不会全部停止“ - 会有一些延迟。只要有100毫秒或更长时间的延迟,您可以让这些进程不停止运行,并且只在必要时手动停止并附加它们。最后,很多ROS进程可能会有定时器和断言“自从上次定时器以来没有太多时间已经过去了”等等。用GDB调试这样的进程变得不可行:你停止它们一次,环顾四周,继续他们立即断言系统没有按设计执行(和崩溃)。