When I load a shared library via dlopen() and retrieve an entry point via dlsym(), and then call the entry point, I get the source code and can step into/step over Ok, but I cannot set GDB breakpoints normally by clicking on the source line number, It sets a little red ball, but no check mark. If I go to the GDB console I can set a GDB breakpoint by manually issuing a command like the following:
b afp.c:487
This tells GDB to set a breakpoint in the source file afp.c at source line 487. If I then Resume it will stop when it hits the breakpoint. If I also enter other GDB commands in the console against functions in the shared library like "info func ptzfid_protocol_init" GDB displays the function prototype. GDB command "info address ptzfid_protocol_init" elicits a GDB response indicating that this is a function, as well as displaying it's correct address.
There are also no variables available in the Variables dialog. Also, even in the disassembly window there is no interspersed source.
It's clear that GDB is capable of symbolically debugging dynamically loaded shared libraries, and there is a wealth of information on the internet to indicate that this is so.
The version of GDB/GDBREMOTE I'm using is v7.3.1, the most current version.