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

时间:2011-02-04 09:17:06

标签: debugging qt4 gdb 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 手臂-NONE-Linux的gnueabi,作为
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) 我交叉编译它(在调试或发布中),它工作正常 在目标上。所以我很确定交叉编译 与我告诉你的问题无关。

我下载了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
  这是免费软件:您可以自由更改并重新分发它   在法律允许的范围内,不提供任何担保。输入“显示复制”
  并详细说明“保修”   此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)目标远程10.10.10.2:4000
  使用10.10.10.2:4000进行远程调试
  警告:无法解析XML目标描述;在编译时禁用了XML支持
  警告:无法找到动态链接器断点功能。
   GDB将无法调试共享库初始化程序
  并跟踪明确加载的动态代码。
  0x400007e0在? ()
  (gdb)

  

(gdb)set 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

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

3 个答案:

答案 0 :(得分:16)

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

  

设置架构i386:x86-64:intel

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

答案 1 :(得分:11)

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

答案 2 :(得分:7)

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

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

Explanation here