Reputation: 953
I got a core while executing an application and I saved the executable, the corefile and a shared library which the application use in /tmp
to check them later. I then modified the library, rebuilt it and started the executable again.
Now when I am trying to debug the core, gdb is loading the shared library from its original path and not from the directory /tmp
where I saved the original library.
For example, the original path was /opt/mydir/lib/libmylib.so.0
.
gdb is loading this shared library, while I want it to load /tmp/libmylib.so.0
.
The application also uses some standard libraries which are in /usr/lib
and /lib
directories so I don't want these paths to get changed. Just want to change /opt/mydir/lib/
-> /tmp
. How can I do that?
Upvotes: 12
Views: 28619
Reputation: 213859
The simplest solution is to temporarily restore /opt/mydir/lib/libmylib.so.0
to the copy that was used at crash time (i.e. the one now in /tmp
), analyse the core, then restore back the new version.
If you don't want to do that, set solib-search-path
and set sysroot
are your friends.
Note that you must set both before loading the core
. This sequence should work:
(gdb) set sysroot /no/such/file
(gdb) set solib-search-path /tmp:/usr/lib:/lib
(gdb) core /tmp/core
Upvotes: 14