【问题标题】:GDB Server - How do you attach multiple processes from multiple machines?GDB 服务器 - 如何从多台机器附加多个进程?
【发布时间】:2017-10-05 23:12:19
【问题描述】:

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

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

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

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

gdbserver --attach comm pid

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

【问题讨论】:

    标签: process gdb


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 2015-09-21
      • 2014-04-20
      • 2012-12-05
      • 2014-03-20
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多