MONDO supplies programmers with a graphical interface to view library dependencies, observe symbol bindings, and uncover subtle programming errors related to the use of shared libraries. MONDO requires no modification to existing code or the dynamic linker and can be used with any application that uses shared libraries.
Most runtime linkers support some sort of debugging output. While it is
intended to be human readable, there is usually way more output than any
human can actually process. Consider the output from the ld.so.1 on
solaris.
[host]~/env LD_DEBUG=bindings ls --snip-- 24186: binding file=ls to file=/usr/lib/libc.so.1: symbol `.rem' 24186: binding file=/usr/lib/libc.so.1 to file=/usr/lib/libc.so.1: symbol `_xflsbuf' 24186: binding file=/usr/lib/libc.so.1 to file=/usr/lib/libc.so.1: symbol `_write' Links-Donour.ps cvs hw6.ps man src Mail debug info nsmail bin donour-et-all.tar ld.stat opt cs331 hw2.ps lib share 24186: binding file=ls to file=/usr/lib/libc.so.1: symbol `exit' 24186: binding file=/usr/lib/libc.so.1 to file=/usr/lib/libc.so.1: symbol `_exithandle' --snip--
Even the simplest program will generate hundreds of lines of output like this to the console. Larger programs, such as web broswers, generate tens of thousands of lines. Mondo extracts meaningful information from this data.