2011-02-04 82 views
13

我有远程调试问题。gdb远程交叉调试失败,并显示“Remote'g'数据包回复过长”

主持人:笔记本电脑的英特尔酷睿i5与Ubuntu 10.10 86 目标:飞思卡尔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
臂-NONE-Linux的gnueabi-gcov的臂-NONE-Linux的gnueabi-readelf 臂-NONE-Linux的gnueabi-作为
臂-NONE-Linux的gnueabi运行臂-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 ++
臂-NONE-Linux的gnueabi纳米臂-NONE-Linux的gnueabi-GCC
臂-NONE-Linux的gnueabi-objcopy把

目标是调试项目用Qt创建。 所以我简单地创建了一个Qt快速工程 - > Qt快速应用程序 它创建了一个简单的Hello World应用程序(C++/Qml) 我交叉编译它(在调试或发布中),它在目标上正常工作 。所以我很确定交叉编译 与我要告诉你的问题无关。

我下载GDB 7.2和执行如下操作:

$出口PATH = /选择/飞思卡尔在/ usr /本地/ GCC-4.1.2-的glibc-2.5-NPTL-3 /臂无-linux-gnueabi /斌:$ PATH
$ CD /home/elux/iMX35/gdb-7.2/
$的./configure --target =手臂-NONE-Linux的gnueabi --build = i686的
$使
$ 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
$使

$ sudo的CP gdbserver的/家庭/ elux/MX35/LTIB /根文件系统的/ usr/bin中/(复制gdbserver的目标)

然后在目标:

$ gdbserver 10.10.10。1:4000测试
已创建过程测试; PID = 2194
侦听端口4000

在目标:

$臂-NONE-Linux的gnueabi-GDB试验(试验是交叉编译它Qt创建者在调试模式) GNU GDB(GDB)7.2
版权所有(C)2010自由软件基金会,公司
许可证的GPLv3 +:GNU GPL 3版本或更高版本http://gnu.org/licenses/gpl.html
这是自由软件:您可以自由改变和重新分配。
在法律允许的范围内,不存在任何担保。请输入“show copying”
和“显示保修”以了解详细信息。
这个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 /平台/试验 - 符号打造臂/测试...完成。
(GDB)目标远程10.10.10.2:4000
使用10.10.10.2:4000
警告远程调试:无法解析XML对象描述;在编译时禁用XML支持
警告:无法找到动态链接器断点功能。
GDB将无法调试共享库初始化程序
并跟踪显式加载的动态代码。
0x400007e0在?? ()
(GDB)

(GDB)设置solib绝对前缀/家庭/ elux/iMX35/LTIB /根文件/从
阅读符号的/ home/elux/iMX35/LTIB /根文件系统/ lib中/ LD-linux.so.3 ...完成。
加载/home/elux/iMX35/ltib/rootfs/lib/ld-linux.so的符号。3

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

(GDB)b主要
远程 'G' 包应答太长:00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

你有任何想法是什么这个问题是有关?我该如何解决它?

回答

7

我曾尝试在运行Ubuntu 11.10 64bit的i5机器上调试飞思卡尔ARM,

这个修复程序对我来说是在配置gdb时指定--with-expat标志。我还不得不安装libexpat1-dev包。

Explanation here

+0

这是正确的答案。 – BHS 2014-08-04 07:10:10

13

正如我最近就遇到了这个在Ubuntu 12.04(x86_64的),并解决它以不同的方式,我想我会发表评论。这种情况下的踢球者是Ubuntu似乎已经启用了libexpat的gdb。后来一些修修补补,这解决了这个问题对我来说:

集架构I386:X86-64:英特尔

所以看来这会导致当有结构的不匹配也是如此。

+2

不知道OP,但解决了我的问题。谢谢一堆。 – 2013-07-05 16:09:04

9

我能够使用gdb-multiarch来解决我的问题。