gdb远程交叉调试失败,"远程'g'数据包回复太长"

use*_*888 16 debugging gdb qt4 qt-creator gdbserver

我有远程调试的问题.

主机:笔记本电脑intel i5与ubuntu 10.10 x86目标:飞思卡尔iMX35(iMX35 PDK)第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 Quick Project - > Qt Quick Application,它创建了一个简单的Hello World应用程序(C++/Qml),我交叉编译它(在调试或发布中),它在目标上工作正常.所以我很确定交叉编译与我将告诉你的问题无关.

我下载了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
创建测试过程测试; pid = 2194
在端口4000上侦听

在目标上:

$ arm-none-linux-gnueabi-gdb测试(测试是在调试模式下交叉编译的Qt Creator)GNU gdb(GDB)7.2
版权所有(C)2010 Free Software Foundation,Inc.
许可证GPLv3 +:GNU GPL版本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...done.
(gdb)target remote 10.10.10.2:4000
使用10.10.10.2:4000 远程调试
警告:无法解析XML目标描述; 编译时禁用XML支持
警告:无法找到动态链接器断点功能.
GDB将无法调试共享库初始化程序
并跟踪显式加载的动态代码.
0x400007e0在?()
(gdb)

(gdb)设置solib-absolute-prefix/home/elux/iMX35/ltib/rootfs/
从/home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3..done读取符号.
/home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3的已加载符号

(GDB)集架构的ARMv5TE
目标结构被假定为用于ARMv5TE
远程的"g"数据包应答过长:00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(GDB)b主
远程的"g"数据包应答过长:00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

你知道这个问题与什么有关吗?我该如何解决?

Gon*_*alo 16

当我最近在Ubuntu 12.04(x86_64)上遇到这个并以不同的方式解决它时,我想我会发表评论.在这种情况下的踢球者是Ubuntu似乎有启用libexpat的gdb.有些修修补补,这解决了我:

设置架构i386:x86-64:intel

因此,当架构不匹配时,可能会出现这种情况.

  • 不知道OP,但这解决了我的问题.谢谢一堆. (2认同)
  • 如果在设置体系结构后问题仍然存在,则可能是寄存器大小切换问题:http://stackoverflow.com/a/34304137/151464 (2认同)

小智 15

我能够使用gdb-multiarch代替并解决了我的问题.


小智 7

我试图在运行Ubuntu 11.10 64bit的i5机器上调试飞思卡尔ARM时遇到同样的问题.

对我有用的修复是在配置gdb时指定--with-expat标志.我还必须安装libexpat1-dev包.

这里解释