0

在本地下载核心转储(核心转储由 systemd-coredump 在原始目标上生成,然后下载到其他位置)并使用 GDB 的本地副本进行调试,共享库将不会加载。

(gdb) bt
#0  0x0000007f83148560 in ?? ()

'info shared' 给出以下输出:

(gdb) info shared
No shared libraries loaded at this time.

但是,当使用'coredumpctl debug'对原始目标进行调试时,所有共享库都会加载而不会出现任何问题。那里的“信息共享”输出

(gdb) info shared
From                To                  Syms Read   Shared Object Library
0x0000007f854cb070  0x0000007f854cd748  Yes (*)     /lib/libcap.so.2
0x0000007f85474fb0  0x0000007f854a20e8  Yes (*)     /usr/lib/libdbus-1.so.3
0x0000007f85439070  0x0000007f8544aff0  Yes (*)     /lib/libpthread.so.0
                                           and so on ……

事情试图手动加载共享库

  1. 尝试使用'set solib-search-path /usr/lib/foo.so' 将 solib-search-path 设置指向共享库,并将solib-absolute-prefix 设置为 /usr/lib。没有确认 foo.so 已加载。

  2. 尝试在可执行文件上运行objdump,获取列表 .so 库,并尝试通过设置路径单独链接它们。那也没有加载库。

  3. 尝试在“ set auto-solib-add off ”之后运行“ sharedlibrary foo ”。未加载共享库 foo。

  4. 尝试使用“set sysroot”命令更改 sysroot 以指向包含 lib/ 和 usr/lib 子目录中的共享库的目录。

由于无法手动加载共享库,因此假设提供一种识别要加载哪些库的方法的机制可能会以某种方式被破坏。有没有人见过类似的东西,可以做些什么来确保共享库的加载?任何帮助表示赞赏。谢谢!

4

0 回答 0