使 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-path
和 set sysroot
是 your friends。
请注意,您必须在加载 core
之前设置两者。这个序列应该有效:
(gdb) set sysroot /no/such/file
(gdb) set solib-search-path /tmp:/usr/lib:/lib
(gdb) core /tmp/core
我在执行应用程序时获得了一个核心,我保存了应用程序在 /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-path
和 set sysroot
是 your friends。
请注意,您必须在加载 core
之前设置两者。这个序列应该有效:
(gdb) set sysroot /no/such/file
(gdb) set solib-search-path /tmp:/usr/lib:/lib
(gdb) core /tmp/core