Process GDB服务器-如何从多台机器连接多个进程?

Process GDB服务器-如何从多台机器连接多个进程?,process,gdb,Process,Gdb,所以我打算使用一个叫做ROS的框架来为一个新机器人编写软件。在ROS框架下,每个软件组件都作为一个单独的进程运行。此外,由于ROS设计为通过TCP消息共享同时在多台机器上工作,因此我的设置将涉及多台机器上的多个进程 现在,我希望能够运行一个gdb服务器并连接每台机器上的所有进程,以便在遇到断点时可以挂起所有进程 查看gdb的文档: 它详细说明了您可以通过以下命令将多个进程连接到gdb服务器: gdbserver--附加通信pid 但是,在运行gdb服务器的机器上,您不会有在其他机器上运行的进程

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

现在,我希望能够运行一个gdb服务器并连接每台机器上的所有进程,以便在遇到断点时可以挂起所有进程

查看gdb的文档:

它详细说明了您可以通过以下命令将多个进程连接到gdb服务器:

gdbserver--附加通信pid


但是,在运行gdb服务器的机器上,您不会有在其他机器上运行的进程的pid。如何将来自不同机器的多个进程连接到同一个gdb服务器?如果不可能,您将如何设置多个gdb服务器并让它们相互通信,从而使一个挂起的服务器挂起其他服务器?

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

目前无法完成此操作——gdb一次只能连接到一个远程目标。这方面的工作正在进行中;它被称为“”项目。那个维基页面有点过时了;其他人已拿起工作,但未更新页面

现在,我希望能够运行一个gdb服务器并连接每台机器上的所有进程,以便在遇到断点时可以挂起所有进程

除此之外(正如Tom Tromey所回答的),这是不可能的——一次调试2-3个以上的进程是不可能的(这里说的是10个进程或进程),即使是可能的,您的进程(在不同的主机上运行)也不会“一次”停止——会有一些延迟。一旦出现100毫秒或更长的延迟,您也可以让这些进程不停止地运行,并且只在必要时手动停止并连接它们

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

现在,我希望能够运行一个gdb服务器并连接每台机器上的所有进程,以便在遇到断点时可以挂起所有进程

除此之外(正如Tom Tromey所回答的),这是不可能的——一次调试2-3个以上的进程是不可能的(这里说的是10个进程或进程),即使是可能的,您的进程(在不同的主机上运行)也不会“一次”停止——会有一些延迟。一旦出现100毫秒或更长的延迟,您也可以让这些进程不停止地运行,并且只在必要时手动停止并连接它们


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

顺便说一句,在最近的GNU大会上有一个关于这个的演讲。幻灯片:;视频:顺便说一句,在最近的GNU大锅上有一个关于这个的演讲。幻灯片:;视频: