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