【发布时间】:2019-01-02 10:19:33
【问题描述】:
我将 Buildroot 2018.02 用于 IMX6 板和基于 GCC 2017.11 (GCC 7.2.1) 的 Linaro 外部工具链 2017.11
现在我正在目标上添加一些调试工具,例如 gdbserver。
如果我使用选项 "Build cross gdb for the host" 并在 "Target Packages > Debugging,.." 菜单中选择主机的 gdb 调试器版本 7.11.x 以及 gdbserver (BR2_PACKAGE_GDB_SERVER),一切正常。 Buildroot 中还有其他版本的 gdb,例如 7.12.x 和 8.0.x。
但是,对于外部工具链,推荐的方法是:
https://github.com/mbats/eclipse-buildroot-bundle/wiki/Tutorial-:-How-to-debug-a-remote-application-%3F 表示只激活 Buildroot 中的 "Copy gdb server to the Target" 选项(虽然帖子有点旧)
我注意到BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM 描述说 Linaro gdb 基于 gdb 8.0,所以是我使用的更新版本 (7.11.x)。
但是当我这样做时,我在目标板上有以下消息:
# gdbserver
-sh: gdbserver: not found
尽管有以下几点:
# which gdbserver
/usr/bin/gdbserver
gdbserver 二进制文件在目标上。
如何在 Buildroot 中解决这个问题?
此外,我还有两个问题:
- 拥有 Linaro 工具链 gdb 真的很重要吗? 在我的情况下,“开箱即用”的 gdb 7.11.x?
- 如果我不使用 Linaro gdb,那么我应该使用 gdb 版本吗 8.0.x(因为 Linaro 版本是基于 GDB 的 8.0 的)?
感谢您的帮助。
【问题讨论】:
-
它可能是一个损坏的符号链接,或者 gdbserver 是一个带有无效 shebang 行的 shellscript。
ls- l /usr/bin/gdbserver或file /usr/bin/gdbserver可能有助于调试它。除此之外,您的外部工具链是否包含 gdbserver 二进制文件? -
ls -l输出为-rwxr-xr-x 1 root root 822000 Dec 31 2018 /usr/bin/gdbserver。这不是 shell 脚本或断开的链接。 Buildroot 使用的包是 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz 可以在这里找到releases.linaro.org/components/toolchain/binaries/7.2-2017.11/…。它包含一个 gdbserver 二进制文件和一个跨 gdb。 -
输入
/usr/bin/gdbserver会导致错误消息吗? -
是的,错误信息是一样的
-
尝试
file /usr/bin/gdbserver或尝试ldd或计算readelf的选项 - 通过找到一个被裁定为不可执行的文件可能会混淆地触发该错误消息,例如它位于格式错误,声称用于错误的 ABI 或依赖于不同的动态链接器。
标签: debugging gdb embedded-linux buildroot gdbserver