qemu gdb调试内核出现remote ‘g’ packet reply is too long

时间:2021-08-27 07:01:39

今天尝试用qemu gdb的方式调试内核,但是当设置了断点,程序执行到断点时就报错:remote ‘g’ packet reply is too long,错误图片如下
qemu gdb调试内核出现remote ‘g’ packet reply is too long
解决办法网上了,说是改一下gdb/remote.c的代码,开始一脸懵逼,都不知道改哪里,知道看到了这篇博客:https://blog.csdn.net/baidu_31504167/article/details/93853921。这篇文章讲到了如何避免这个问题
重新下载gdb源码版本可以自己选,应该都行,然后修改源码目录下 gdb/remote.c(在我电脑上是gdb-7.9.1/gdb/remote.c)的这几行代码

if (buf_len > 2 * rsa->sizeof_g_packet)
    error (_("Remote 'g' packet reply is too long: %s"), rs->buf);

改为:

if (buf_len > 2 * rsa->sizeof_g_packet) {
   rsa->sizeof_g_packet = buf_len ;
   for (i = 0; i < gdbarch_num_regs (gdbarch); i  ) {
       if (rsa->regs->pnum == -1)
          continue;
       if (rsa->regs->offset >= rsa->sizeof_g_packet)
          rsa->regs->in_g_packet = 0;
       else
          rsa->regs->in_g_packet = 1;
   }
}

至于什么原因我暂时也不清楚,修改完成后编译安装即可,安装过程可见上面链接的文章。