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?
If you want to use ' solib-search-path ' instead of ' sysroot ', be sure to set ' sysroot ' to a nonexistent directory to prevent GDB from finding your host's libraries. ' sysroot ' is preferred; setting it to a nonexistent directory may interfere with automatic loading of shared library symbols.
Specifies directories where GDB will search for shared libraries with symbols. This option is useful when debugging with gdbserver.
Specifies the system root directory to search for shared library symbols. The debugger uses this directory to search for a copy of the debug versions of target shared libraries. The system root on the host workstation must contain an exact representation of the libraries on the target root filesystem.
Setting breakpoints A breakpoint is like a stop sign in your code -- whenever gdb gets to a breakpoint it halts execution of your program and allows you to examine it. To set breakpoints, type "break [filename]:[linenumber]".
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With