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

使gdb从特定路径加载共享库,gdb,shared-libraries,Gdb,Shared Libraries,我在执行一个应用程序时得到了一个core,我保存了可执行文件、corefile和一个共享库,应用程序在/tmp中使用该库,以便以后检查它们。然后我修改了库,重新构建了它,并再次启动了可执行文件。 现在,当我尝试调试内核时,gdb正在从其原始路径加载共享库,而不是从我保存原始库的目录/tmp 例如,原始路径是/opt/mydir/lib/libmylib.so.0。 gdb正在加载这个共享库,而我希望它加载/tmp/libmylib.so.0。 该应用程序还使用了一些标准库,它们位于/usr/li

我在执行一个应用程序时得到了一个core,我保存了可执行文件、corefile和一个共享库,应用程序在
/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
都是可用的

请注意,在加载
内核之前,必须同时设置这两项。这一顺序应该有效:

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