gpt4 book ai didi

Eclipse远程调试arm-linux库

转载 作者:行者123 更新时间:2023-12-04 03:24:37 26 4
gpt4 key购买 nike

我在运行:

  • Eclipse 3.8.1(构建 ID:deb 构建)。
  • 在 VM 中的 Ubuntu 16.04 LTS 和目标 Raspberry Pi 3 上的 UbuntuMATE 16.04 LTS 上。
  • gdb-multiarch(架构设置为在 .gdbinit 中武装)在本地和目标上的 gdbserver`。

交叉编译和远程部署成功。但是,当我在远程目标上运行时,似乎出现了一些库问题。以下 gdb-multiarch 的输出(删除了多余的文本):

GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11 Copyright (C) 2016 Free Software
Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
http://gnu.org/licenses/gpl.html This GDB was configured as
"x86_64-linux-gnu".


Program stopped. 0x76fd7a40 in ?? () from
/home/fred/raspberrypi/rootfs/lib/arm-linux-gnueabihf/ld-2.23.so

执行在 main 处停止。但是,它似乎并没有因为断点而停止。停止似乎是某些库问题和 Unresolved 符号(或更严重的问题)导致 ?? 的结果。

我在 .gdbinit 文件中设置了 set sysroot 以指示可以找到共享库的位置。 StepIn、StepOut 图标在 Eclipse 中高亮显示,如果我按下暂停键并查看正在使用哪个内核运行进程(带有进程 ID),我可以读取 ARM 寄存器!

在进一步恢复和暂停操作后 segmentation fault发生:

Program stopped. 0x76fe2e92 in ?? () from
/home/fred/raspberrypi/rootfs/lib/arm-linux-gnueabihf/ld-2.23.so

Program received signal SIGSEGV, Segmentation fault. 0x76fd905e in ??
() from
/home/fred/raspberrypi/rootfs/lib/arm-linux-gnueabihf/ld-2.23.so

Program terminated with signal SIGSEGV, Segmentation fault. The
program no longer exists.

有什么想法吗? (正如它可能显示的那样,我对 Linux 非常陌生。)

感谢您提出以下进一步探索的问题:

在 Eclipse 中,我通过选择 Debug Configuration 启动 GDB,然后选择我设置的远程配置。

代码非常简单,由一个输出一些文本的流运算符和一个循环组成,但是它永远不会到达。我想我刚刚设法从命令行重现了这个问题。顺便说一句,我先开始了目标。 (为清楚起见,再次删除了多余的文本。)

gdb-multiarch Hello_Raspberry_Pi

Reading symbols from Hello_Raspberry_Pi...done.
The target architecture is assumed to be arm
(gdb) target remote ubuntumate-pi
(gdb) target remote 192.168.0.12:2345
Remote debugging using 192.168.0.12:2345
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initialisers
and track explicitly loaded dynamic code.
0x76fd7a40 in ?? ()
(gdb) set architecture arm
The target architecture is assumed to be arm
(gdb) set sysroot /home/fred/raspberrypi/rootfs/lib/arm-linux-gnueabihf
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initialisers
and track explicitly loaded dynamic code.
(gdb)

目标端的行为符合预期:

fred@UbuntuMATE-Pi:~/Hello_Raspberry_Pi$ gdbserver 192.168.0.7:2345 Hello_Raspberry_Pi
Process Hello_Raspberry_Pi created; pid = 17363
Listening on port 2345
Remote debugging from host 192.168.0.7

所以也许 Unable to find dynamic linker breakpoint function. 是个大线索?

我似乎错误地定义了Shared Libraries。当我删除此设置时,发生了一些更接近预期的行为。如下所示,但是我仍然有一个警告,我想删除:

For help, type "help".
Type "apropos word" to search for commands related to "word".
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initialisers
and track explicitly loaded dynamic code.
0x76fd7a40 in ?? ()

Breakpoint 2, main () at ../src/Hello_Raspberry_Pi.cpp:18
18 cout << "I'm in the While loop and the value of variable i is: " << i << endl;

Breakpoint 1, main () at ../src/Hello_Raspberry_Pi.cpp:20
20 usleep(1000000); //wait for 1 seconds

现在 Eclipse 在 main 处设置断点并允许步进 - 终于!

最佳答案

我也遇到过类似的问题,从 ld.so 获取段错误。执行了以下步骤来修复它。

  1. 在 sysroot 和 target 中安装 libc6-dbg 包。
  2. 在 sysroot 和 target 中创建文件夹/lib/.debug。
  3. 将/usr/lib/debug/lib/arm-linux-gnueabihf/ld-2.23.so 复制到 sysroot 和 target 中的/lib/.debug。

关于Eclipse远程调试arm-linux库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37931819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com