使 gdb 从特定路径加载共享库

make gdb load a shared library from a specific path

我在执行应用程序时获得了一个核心,我保存了应用程序在 /tmp 中使用的可执行文件、核心文件和共享库,以便稍后检查它们。然后我修改了库,重建它并再次启动可执行文件。 现在,当我尝试调试核心时,gdb 正在从其原始路径而不是从我保存原始库的目录 /tmp 加载共享库。

例如,原来的路径是/opt/mydir/lib/libmylib.so.0。 gdb 正在加载此共享库,而我希望它加载 /tmp/libmylib.so.0。 该应用程序还使用了一些位于 /usr/lib/lib 目录中的标准库,因此我不希望更改这些路径。只想更改 /opt/mydir/lib/ -> /tmp。我该怎么做?

最简单的解决方案是暂时将/opt/mydir/lib/libmylib.so.0恢复到崩溃时使用的副本(即现在/tmp中的那个),分析核心,然后恢复新版本。

如果您不想这样做,set solib-search-pathset sysrootyour friends

请注意,您必须在加载 core 之前设置两者。这个序列应该有效:

(gdb) set sysroot /no/such/file
(gdb) set solib-search-path /tmp:/usr/lib:/lib
(gdb) core /tmp/core