今天尝试用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;
}
}
至于什么原因我暂时也不清楚,修改完成后编译安装即可,安装过程可见上面链接的文章。