c – 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.
解决方法:
当我阅读GDB手册时,这也让我感到困惑.我怀疑您需要实现的命令集(即那些应该影响模拟器状态的命令)是服务器需要能够回复的命令的子集.
这个excellent guide to writing an RSP server by Embecosm在3.1节中有一个非常方便的序列图,它描述了GDB和你的RSP服务器之间的初始握手:
一旦握手工作,就可以更容易地看到协议如何组合在一起并开始在与模拟器(或其他目标)交互的代码中编写.
标签:c-3,linux,debugging,gdb,gdbserver 来源: https://codeday.me/bug/20190702/1354805.html