Win10主机远程调试VirtualBox中Ubuntu虚拟机程序失败问题
解决Mingw64 GDB连接Ubuntu GDBserver的架构/寄存器解析错误
核心解决方案
替换为交叉编译GDB:安装
x86_64-linux-gnu-gdb(针对Linux x86_64目标的交叉GDB)替代Mingw64默认的gdb。Mingw原生gdb是为Windows平台构建的,缺乏GNU/Linux OS ABI的处理支持,即使架构同为x86_64,也无法正确解析Linux目标的寄存器和二进制格式。配置本地sysroot避免远程文件传输:
- 将Ubuntu虚拟机中的
./application及符号文件复制到Win10主机本地目录(比如C:\ubuntu-target\) - 在GDB中执行以下命令再连接:
set sysroot C:\ubuntu-target file C:\ubuntu-target\application target remote 192.168.0.24:9999
- 将Ubuntu虚拟机中的
确认两端版本匹配:在Ubuntu中执行
file ./application确保输出包含x86-64,gdbserver --version确认是64位版本;在Win10中确认交叉GDB版本与Ubuntu的gdbserver版本尽量接近(避免协议不兼容)。
错误原因分析
虽然主机和虚拟机都是x86_64架构,但Mingw64默认GDB是针对Windows PE二进制和Windows系统调用设计的,没有内置GNU/Linux ELF二进制和Linux OS ABI的处理逻辑。远程连接时,gdbserver发送的Linux格式寄存器数据和ELF文件信息,无法被Windows版GDB正确解析,从而出现"Architecture rejected target-supplied description"和"Remote register badly formatted"错误。
内容的提问来源于stack exchange,提问作者Misko Jones
相关产品推荐
相关产品推荐

