使gdb从特定路径加载共享库
我在执行一个应用程序时得到了一个core,我保存了可执行文件、corefile和一个共享库,应用程序在使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
/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