为了项目的需要,我编写了一个简单的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。