Search code examples
debugginggdbshared-librariesbreakpoints

how to set breakpoint on function in a shared library which has not been loaded in gdb


I have a shared library libtest.so which will be loaded into the the main program using dlopen. Function test() reside in libtest.so and will be called in the main program through dlsym. Is there any way I could set up a break point on test?

Please note that the main programm has not been linked to libtest.so during linking time. Otherwise , I should be able to set the break point although it is a pending action. In my case, when I do b test, gdb will tell me Function "test" not defined.


Solution

  • Actually gdb should tell you that it's able to resolve the symbol in the future, when new libraries are loaded:

    (gdb) b test
    Function "test" not defined.
    Make breakpoint pending on future shared library load? (y or [n]) y
    Breakpoint 1 (test) pending.
    (gdb) r
    

    And later on once the .so object is loaded, it will resolve the breakpoint, e.g.:

    Reading symbols for shared libraries . done
    Breakpoint 1 at 0xcafebebe
    Pending breakpoint 1 - "test" resolved
    

    By default, gdb asks for manual confirmation to set such pending breakpoint. gdb can be instructed to directly set the breakpoint without asking by issuing the command set breakpoint pending on (documentation).