Linux Debugging: Listing Shared Libraries at Runtime

I had a library (a python plugin) that crashed and outputted the “very useful”:

illegal instruction

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
125

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:

export LD_DEBUG=files

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 [0]; direct_opencount=1
14121:
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)

or even:

/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.

Share this:
FacebookTwitterHacker NewsSlashdotRedditLinkedInPinterestFlipboardMeWeLineEmailShare

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK Pi 4C Plus

One Reply to “Linux Debugging: Listing Shared Libraries at Runtime”

Leave a Reply

Your email address will not be published. Required fields are marked *

Khadas VIM4 SBC
Khadas VIM4 SBC