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

Posted 我才是祖国的花朵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
   }
}

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

以上是关于qemu+gdb调试内核出现remote ‘g’ packet reply is too long的主要内容,如果未能解决你的问题,请参考以下文章

开启内核地址随机化KASLR后, qemu 调试 kernel 不能设置断点

利用QEMU+GDB搭建Linux内核调试环境

使用 GDB + Qemu 调试 Linux 内核

vscode + qemu + gdb 搭建内核开发环境

使用QEMU调试Linux内核代码

在qemu模拟的aarch32上使用kgtp