gdb远程交叉调试失败,提示“Remote 'g' packet reply is too long”。

19

我有一个远程调试的问题。

主机:笔记本电脑,采用 Ubuntu 10.10 x86 操作系统,搭载 Intel i5 处理器。 目标设备:Freescale iMX35(iMX35 PDK),使用 Arm 11 处理器。 开发环境:Qt Creator 2.1RC 和 Qt4.7.1 库。 Arm 编译器路径:/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin

arm-none-linux-gnueabi-gcc-4.1.2、arm-none-linux-gnueabi-objdump、 arm-none-linux-gnueabi-addr2line、arm-none-linux-gnueabi-gccbug、
arm-none-linux-gnueabi-ranlib、arm-none-linux-gnueabi-ar、 arm-none-linux-gnueabi-gcov、arm-none-linux-gnueabi-readelf、 arm-none-linux-gnueabi-as、
arm-none-linux-gnueabi-run、arm-none-linux-gnueabi-c++、 arm-none-linux-gnueabi-size、arm-none-linux-gnueabi-c++filt、 arm-none-linux-gnueabi-gprof、arm-none-linux-gnueabi-strings、 arm-none-linux-gnueabi-cpp、arm-none-linux-gnueabi-ld、
arm-none-linux-gnueabi-strip、arm-none-linux-gnueabi-g++、 arm-none-linux-gnueabi-nm、arm-none-linux-gnueabi-gcc、 arm-none-linux-gnueabi-objcopy

目标是调试使用Qt创建的项目。因此,我简单地创建了一个Qt快速项目 -> Qt快速应用程序,它创建了一个简单的Hello World应用程序(C++/Qml)。我进行交叉编译(在debug或release模式下),并且在目标上运行良好。因此,我非常确定交叉编译与我将要展示给您的问题无关。
我下载了gdb 7.2,并执行了以下操作: $ export PATH=/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin:$PATH $ cd /home/elux/iMX35/gdb-7.2/ $ ./configure --target=arm-none-linux-gnueabi --build=i686 $ make $ sudo make install $ export CC=arm-none-linux-gnueabi-gcc $ export LD=arm-none-linux-gnueabi-ld $ cd gdb/gdbserver/ $ ./configure --build=i386 --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi $ make $ sudo cp gdbserver /home/elux/MX35/ltib/rootfs/usr/bin/ (将gdbserver复制到目标)
然后在目标上: $ gdbserver 10.10.10.1:4000 Test 进程Test已创建;pid = 2194 正在监听端口4000
在目标上:

$ arm-none-linux-gnueabi-gdb Test (Test是在Qt Creator中以调试模式交叉编译的) GNU gdb (GDB) 7.2
版权所有 (C) 2010自由软件基金会
许可证 GPLv3+: GNU通用公共许可证版本3或更高版本 http://gnu.org/licenses/gpl.html
这是自由软件: 您可以自由更改和重新发布它。
在法律允许的范围内,没有任何保证。 输入"show copying"
和"show warranty"查看详细信息。
此GDB配置为"--host=i686 --target=arm-none-linux-gnueabi"。
有关错误报告说明,请参见:
http://www.gnu.org/software/gdb/bugs/...
正在从/home/elux/iMX35/ltib/rpm/BUILD/qt-everywhere-opensource-src-4.7.1/platform/Test-build-arm/Test读取符号...完成。
(gdb) target remote 10.10.10.2:4000
使用10.10.10.2:4000进行远程调试
警告: 无法解析XML目标描述; XML支持在编译时被禁用
警告: 找不到动态链接器断点函数。
GDB将无法调试共享库初始化程序
和跟踪显式加载的动态代码。
0x400007e0 in ?? ()
(gdb)

并且

(gdb) 设置 solib-absolute-prefix /home/elux/iMX35/ltib/rootfs/
正在读取符号文件 /home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3...完成。
已加载 /home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3 的符号。

但是

(gdb) set architecture armv5te 目标架构被假定为armv5te 远程'g'包回复太长: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (gdb) b main 远程'g'包回复太长: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 你知道这个问题是与什么相关的吗?我该如何解决它?
3个回答

21

我能够使用gdb-multiarch,并解决了我的问题。


另外,请确保gdb-multiarch软件包是最新的。 - Joey Allen

19

最近我在Ubuntu 12.04(x86_64)上遇到了这个问题,并以另一种方式解决了它,因此我想进行评论。在这种情况下的关键是Ubuntu似乎启用了带有libexpat的gdb。稍加调整后,以下内容对我有效:

set architecture i386:x86-64:intel

因此,当架构不匹配时,似乎也会出现这种情况。


2
不知道原帖的情况,但这解决了我的问题。非常感谢。 - Dan Albert
2
如果在设置架构后问题仍然存在,可能是寄存器大小切换的问题:https://dev59.com/imoy5IYBdhLWcg3wQ78F#34304137 - Seth P

6

我曾经在一台运行Ubuntu 11.10 64位系统的i5机器上尝试调试Freescale ARM时遇到了同样的问题。

对我有效的解决方法是在配置gdb时指定--with-expat标志,还必须安装libexpat1-dev软件包。

这里有解释


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接