GDB加载so文件失败并报错No such file or directory

GDB failed to load so files and errors No such file or directory

我正在使用 alpine linux 将核心文件加载到 docker 容器内的 GDB 中。 最初我的 gdb 抱怨找不到二进制文件,然后我按照这个讨论 并安装了 libc6-compat,即使我有一个 64 位 linux 并且我的二进制解释器是 64 位 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

这确实有效,但现在我对 .so 文件遇到了同样的错误。我可以看到 .so 文件位于 solib-search-path 上设置的路径中,但 gdb 没有加载任何库并抱怨没有这样的文件或目录。

binary 在库位于路径中的生产主机上运行 我通过设置 solib-search-path

运行 开发主机上的二进制文件

ldd 二进制文件说找不到库,这是预期的,因为这是一个开发主机

binary runs on a production host where the libraries are in the path I am running the binary on a development host by setting the solib-search-path

你的问题就在这里。

solib-search-pathGDB 查找库的路径。

该设置不会影响二进制文件本身,它使用标准系统库路径、编译在 DT_RPATHLD_LIBRARY_PATH 环境中用于搜索共享库的变量。

通常,只有在分析来自 其他主机 的核心转储时才应设置 solib-search-path(GDB 需要访问所使用的确切库生成核心转储时)。设置 solib-search-path 而 运行 永远不需要本地二进制文件——GDB 可以通过询问 运行time 加载程序它们在哪里来自动推断库的位置。

ldd binary says libraries not found which is expected since this is a development host

如果 ldd 这么说,那么 当然 你将无法 运行 二进制文件(GDB 内部或外部)。