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

时间:2016-04-13 06:48:20

标签: 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。

1 个答案:

答案 0 :(得分:2)

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

这个excellent guide to writing an RSP server by Embecosm在3.1节中有一个非常方便的序列图,它描述了GDB和你的RSP服务器之间的初始握手:

Handshake sequence diagram

一旦握手工作,就可以更容易地看到协议如何组合在一起并开始在与模拟器(或其他目标)交互的代码中编写。