gdb warning: Selected architecture i386 is not compatible with reported target architecture i386:x86-64

warning: Selected architecture i386 is not compatible with reported target
architecture i386:x86-64

为什么这个标题这么长,因为这个警告就这么长。

还是在折腾操作系统,今天到了用 gdb 配合 qemu 来调试内核,就碰到了这个问题。

虽然显示的是警告,但是下面的错误和这个警告有莫大的关系。

想起之前看到的,软件里出现警告便是已经说明程序没有按照预期执行了,一个严谨的程序员理当消除一切异常。

言归正传

此警告下接着会出现如下错误

Remote 'g' packet reply is too long (expected 312 bytes, got 536 bytes):

后边跟着一串16进制字符。

操作系统与 gdb、qemu 皆为64位。

根据警告字面意思来理解,是所选择的 i386 架构与以声明的 x86-64 架构不兼容,刚会用 gdb 面对这个问题着实有些懵,不知道是 gdb 的问题还是 qemu 的问题。网上讨论也有些纷杂,众说纷纭,莫衷一是。

先说解决措施,通过设置一条 gdb 指令来显示的指出所调试架构,便可以解决从问题。

set arch i386:x86-64

其实还是不太明白,只是倾向于 qemu 的一些问题,因为网上还有些解决措施是通过 hack qemu来解决的。

值得一提的是,gdb 中直接输入

set arch

他会给你提示有效的参数值。

Requires an argument. Valid arguments are i386, i386:x86-64, i386:x64-32, i8086, i386:intel, i386:x86-64:intel, i386:x64-32:intel, i386:nacl, i386:x86-64:nacl, i386:x64-32:nacl, auto.

参考链接:

[Remote ‘g’ packet reply is too long
Ask Question](https://stackoverflow.com/questions/8662468/remote-g-packet- reply-is-too- long?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)