gdb远程调试。实现一个假的 gdbserver 存根。经过多次请求和响应后,收到警告:无效的远程回复

Dan*_*iel 6 c linux debugging gdb gdbserver

为了项目的需要,我编写了一个简单的java套接字程序来实现一个“假”gdbserver存根。因此,支持最少数量的 gdb RSP 命令:g、G、m、M、c 和 s。对于其他命令,只需响应“$#00”即可。根据gdb的手册,这会告诉gdb“服务器”不支持其他命令。

我使用 Eclipse CDT 来帮助我进行调试。在调试配置中,我选择了 c/c++ 远程应用程序,并在 localhost:10000 上使用 TCP 设置调试器连接,我的 java 程序将在其中侦听。

首先,gdb 发送 qSupported、Hg0、qTStatus、? 和 qC 等命令。对所有命令的响应都是“$#00”,告诉 gdb“服务器”不支持这些命令。然后,gdb 发送 qAttached 和 qOffsets。发送两个“$#00”响应并收到来自 gdb 的“+”后,gdb 显示“警告:远程回复无效:”。

有人可以告诉我为什么会发生这种情况吗?为什么gdb不发送命令并说“无效的远程回复:”,我不知道什么回复无效,毕竟我只是发送“$#00”和“+”给gdb。

sni*_*im2 3

当我阅读GDB手册时,这也让我感到困惑。我怀疑您需要实现的命令集(即那些应该影响模拟器状态的命令)是您的服务器需要能够回复的命令的子集。

Embecosm 编写的这本优秀的 RSP 服务器指南在第 3.1 节中有一个非常方便的序列图,它描述了 GDB 和 RSP 服务器之间的初始握手:

握手时序图

一旦握手工作正常,就可以更轻松地了解协议如何组合在一起并开始编写与模拟器(或其他目标)交互的代码。