[原创]qemu 2.0与gdb连接调试内核时出现"Remote 'g' packet reply is too long"问题分析
qemu 2.0加入-s -S调试Linux内核与gdb 连接后 gdb出现 Remote 'g' packet reply is too long (expected 308 bytes, got 536 bytes): 错误
gdb出现提示代码如下:

图1
问题很明显是gdb从qemu接收回来的g包大于gdb定义的g包的大小。
动态调试gdb找到初始化rsa->sizeof_g_packet代码所在位置如下:

图2
进入map_regcache_remote_table()函数中

图3
动态打印num_remote_regs变量如下:

图4
size_of_g_packet大小如下:

图5
qemu-2.0中处理gdb命令在gdbstub.c中gdb_handle_packet函数
代码如下:

图6
而且qemu发送了gdb_num_g_regs=57个寄存器。
gdb 打印len变量如下

图7
大小为308,正好是上面出现错误的数字。
看来问题是gdb与qemu协商接收的寄存器数量时候出的问题。
继续阅读gdb协议发现。gdb与远程协商寄存器的命令如下

图8
上图中5095行中的qXfer:feature:read的功能是读取远程host中的关于寄存器描述的xml。高版本的qemu xml文件gdb-xml文件夹下

图9
qemu 2.0的目录下并没有这个文件

图10
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
