MIT 6.1810实验2中GDB调试xv6遇内部错误及运行问题求助
解决xv6调试中的GDB问题
问题1:执行continue时提示"The program is not being run"
这是因为仅加载内核文件但未连接到运行xv6的QEMU调试目标。正确调试流程如下:
在第一个终端启动带调试功能的QEMU:
make qemu-gdb该命令会启动QEMU并在1234端口监听GDB连接。
在第二个终端启动gdb-multiarch,依次执行:
file kernel/kernel target remote :1234 # 连接QEMU调试端口 b syscall c此时即可正常继续执行程序。
问题2:GDB触发内部断言错误i387_supply_fxsave: Assertion 'tdep->st0_regnum >= I386_ST0_REGNUM' failed
该错误是GDB 12.1版本调试32位xv6时的已知兼容性问题,可通过以下方式解决:
方法1:显式设置目标架构
在连接QEMU前,在GDB中执行:
set architecture i386
再执行target remote :1234,后续即可正常设置断点和调试。
方法2:降级GDB到11.x版本
GDB 11.x系列无此兼容性问题。以Debian/Ubuntu为例,安装旧版本命令:
sudo apt install gdb-multiarch=11.1-0ubuntu1
如需长期保留旧版本,可配置apt pinning防止自动升级。
方法3:使用QEMU内置调试器替代
若不想调整GDB版本,可直接使用QEMU内置调试器:
make qemu -s -S
随后在QEMU中输入调试命令即可(功能略逊于GDB)。
内容的提问来源于stack exchange,提问作者user18343496
相关产品推荐
相关产品推荐

