是否可以在GDB会话之间传输对程序的控制

Is it possible to transfer control of a program between GDB sessions?

本文关键字:传输 程序 控制 之间 会话 GDB 是否      更新时间:2023-10-16

我有一个带有C 程序进程的GDB会话。我想将其转移到另一台具有不同接口的机器上的GDB会话中,以更容易调试。是否可以在不继续运行的情况下分离该过程,以便我可以将其连接到其他GDB会话中?

是否可以在不继续运行的情况下分离该过程 我可以在其他GDB会话中附加它?

我喜欢您的问题,但让我建议一种易于使用的替代方法。

一个简单的功能(例如以下功能)可以容纳任何线程,只要它需要附加调试器即可。另外,您可以使用-D选项来设置Parkflag,以制作和有条件编译并默认设置为您的喜好。

bool parkFlag = true;
void park()
{
   while(parkFlag)     // pause thread for some time
      std::this_thread::sleep_for (std::chrono::milliseconds(100));
}

因此,对于您的"更方便"的调试会话,请在主要之后调用公园。

现在启动"更方便"的调试器,附加,设置一些断点,然后清除公园。

是否可以在不继续运行的情况下分离该过程,以便我可以将其连接到其他GDB会话中?

您可以执行(gdb) signal SIGSTOP来停止当前过程,但是GDB将自动恢复detach命令。

可能有效的不是detach,而是用kill -9杀死GDB本身。即使那样,当内核不再是ptrace d。

debug

下的程序产生了GDB会话

我对您的程序如何产生GDB会话还不够了解。但是,您可以在测试运行之前尝试创建别名(第6行)。

 1 dmn@C5:~$ which gdb
 2 /usr/local/bin/gdb
 3 dmn@C5:~$ which ddd
 4 /usr/bin/ddd
 5 dmn@C5:~$ 
 6 dmn@C5:~$ alias gdb='ddd'
 7 dmn@C5:~$ 
 8 dmn@C5:~$ which gdb
 9 /usr/local/bin/gdb
10 dmn@C5:~$ which ddd
11 /usr/bin/ddd
12 dmn@C5:~$ 
13 dmn@C5:~$ gdb
14 dmn@C5:~$ ---command to start your program---

在我的Ubuntu系统上,第13行调用别名。


从我的嵌入式系统背景中,我们可以通过可执行的二进制文件进行操作,以及我们发现的任何字符串(例如'gdb'),我们都可以编辑其他内容(也许是'ddd')。

不推荐它,因为还有更多适当的"补丁"方法...但是您只是在尝试" spawn'a spawn'的想法'可以'

也许这是"如何修补现有可执行文件?"(即不重建它。