gdbserver:映射共享库部分时出错

时间:2016-07-18 18:46:04

标签: gdb gdbserver

使用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

2 个答案:

答案 0 :(得分:0)

我发现gdb版本7.10+对我的特定二进制文件有这个问题。仍然不确定为什么。这对7.9很好,所以我降级以克服这个问题。

答案 1 :(得分:0)

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

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

通过这种sysroot方法,我不仅解决了该错误,而且还能够将该库与完整的调试符号一起使用(约3GB,这可能还会绊倒较新的GDB版本)。 / p>

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