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 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
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。键入“显示复制”
和“显示保修”以了解详细信息。
此 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 在?? ()
(gdb)

(gdb) set 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
The target architecture is assumed to be armv5te
Remote 'g' packet reply is too long: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(gdb) b main
Remote 'g' packet reply is too long: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

4

3 回答 3

21

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

于 2013-09-08T04:09:25.500 回答
18

当我最近在 Ubuntu 12.04 (x86_64) 上遇到这个问题并以不同的方式解决它时,我想我会发表评论。在这种情况下,问题在于 Ubuntu 似乎启用了带有 libexpat 的 gdb。后来进行了一些修补,这为我解决了:

设置架构 i386:x86-64:intel

因此,当架构不匹配时,这似乎也会导致。

于 2013-05-15T09:16:23.840 回答
6

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

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

在这里解释

于 2012-03-15T19:53:48.303 回答