Remote 'g' packet reply is too long問題的解決

GDB7.6 Remote ‘g’ packet reply is too long

在用Eclipse調試OpenWrt程序的時候,gdb traces中總是出現這樣的一個錯誤,導致無法調試,令人百思不得其解。

771,735 28^error,msg="Remote 'g' packet reply is too long: 00000000f8ffffffecceea7740b4ff77010000004\
46eff7f4c6eff7f2067e17f0000000046b8000000408a860200000000031c7fffffffff00000000c816e977226fff7f1c0b4\
000906dff7f0088e777f8208900fcce4500000044001cdc450087040000ac8a4000fefcf87c00000000a003eb77c86cff7fc\
86cff7f4c17e97713a40001a070230029000000a0c1e47724008010bc8a4000fffffffffffffffffffffffffffffffffffff\
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
fffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000"\

網上對此說法多數聚焦到一個問題:cpu arch的問題,導致register讀取了超長的信息,但解決方案莫衷一是。

於是做了一個大膽的假設:既然是超長了,如果忽略這些信息會怎樣呢?

so修改gdb/remote.c文件,定位到:

static void process_g_packet (struct regcache *regcache)函數,6113行,屏蔽對buf_len的判斷。

image

 image

改了之後

make toolchain/gdb/install

如果顯示is up to date

先make toolchain/gdb/clean(注意clean之後,remote.c將會重新生成)

然後再 make toolchain/gdb/install

哈哈,問題解決!

 

但這確實不是一個好的解決方案。還望知道其中具體緣由的童鞋告知一二。

後記: 在這裏 http://x-slam.com/da_jian_eclipse_qemu_gdb_diao_shi_linux_kernel_huan_jing

有關於該問題的解決方案:

Remote ‘g’ packet reply is too long: d85f8780ffffffff88……
省略號(……)表示後面還有一長串16進制數,解決的方法是在進行gdb操作前先在(gdb)後面執行如下語句:
set architecture i386:x86-64:intel
請根據實際情況配置,這個問題是GDB調試64位Kernel時纔有的。該作者機器上有如下可選參數:
(gdb) set architecture
Requires an argument. Valid arguments are i386, i386:x86-64, i386:x64-32, i8086, i386:intel, i386:x86-64:intel, i386:x64-32:intel, auto.

發佈了59 篇原創文章 · 獲贊 12 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章