Linux Debugging: Listing Shared Libraries at Runtime
I had a library (a python plugin) that crashed and outputted the “very useful”:
I tried pdb (the Python Debugger) to find the issue without success.
So I tried to add some printf to this library but none were outputted at runtime. So I guessed the illegal instructions was generated by the shared libraries.
Let’s see how many libraries we’ve got:
ldd libbrowsernode.so | wc -l
Oh dear!… 125 libraries.. This is where panic sets in.
Luckily, there is a simple way to list the dynamic libraries as they are loaded (and some more useful info). Simply set:
before running your program. This is extremely verbose, so I recommend you redirect the output to a file.
This method allowed me to find undefined symbols during dynamic libraries load time with errors such as:
opening file=/usr/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-png.so ; direct_opencount=1
14121: /usr/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-png.so: error: symbol lookup error: undefined symbol: g_module_check_init (fatal)
14121: /usr/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-png.so: error: symbol lookup error: undefined symbol: g_module_unload (fatal)
/usr/bin/python: error: symbol lookup error: undefined symbol: nspr_use_zone_allocator (fatal)
Finally, you just need to find the libraries containing those symbols to fix the issue.