【问题标题】:gdbserver: Error while mapping shared library sectiongdbserver:映射共享库部分时出错
【发布时间】:2016-07-18 18:46:04
【问题描述】:

我在使用 gdbserver 时遇到问题。 gdb 显示加载其中一个共享库时出错。

Error while mapping shared library sections:
`target:<path to library>': not in executable format: Invalid argument

使用 PID 连接 gdb 时我没有问题。但是 gdbserver 抛出上述错误,然后我无法在该共享库中设置任何断点。

知道有什么问题吗?我有来自同一应用程序的其他库似乎没有任何问题。

我正在跑步

Centos 6.7
gdb version 7.11.1
gcc version 4.4.7

【问题讨论】:

    标签: gdb gdbserver


    【解决方案1】:

    我发现 gdb 版本 7.10+ 在我的特定二进制文件中存在这个问题。仍然不确定为什么。这适用于 7.9,因此我降级以解决此问题。

    【讨论】:

      【解决方案2】:

      我在 GDB 7.11(Android 的 NDK-r20 附带的那个)中遇到了这个错误,这是由于我的库相对较大(300MB)引起的,这导致gdbserver 的整数解析器中的一个错误阻止了gdbserver 加载任何大于 268MB 的库。该错误已在 GDB 8.2 中通过将限制提高到 2GB (https://sourceware.org/bugzilla/show_bug.cgi?id=23198) 得到修复。

      我使用 GDB 的 sysroot 功能来解决这个问题:https://sourceware.org/gdb/current/onlinedocs/gdb/Files.html#index-set-sysroot
      我将库从远程目标复制到本地系统* 并使用set sysroot sysroot-here(其中“sysroot-here”是包含我复制的目录/文件的目录)。这会强制 GDB 在本地而不是从目标中读取符号。

      通过这种sysroot 方法,我不仅解决了这个错误,而且还能够使用带有完整调试符号的库(大约 3GB,这可能也会影响较新的 GDB 版本)。

      * 我复制了所有系统库和应用程序的库,同时保留了完整的目录结构/文件路径。我只想复制触发错误的特定库,但sysroot 要么全部要么全无:要么在主机本地找到所有库,要么没有。另见:A way to have GDB load libraries from local sysroot and remote gdbserver

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多