If you are installing mondo for the first time please read through the installation section for the requirements of MONDO. The features section details the workings of MONDO. The version history shows the additions to MONDO over time. Refer to the table of contents for any other questions.
For the past 10-15 years, shared libraries and dynamic linking have changed the way in which application programmers write software. Instead of writing huge monolithic applications, it is quite common to execute smaller software components, extension modules, and plugins. For example, when programmers use scripting languages like Python or Tcl, they also tend to use a collection of loosely-coupled dynamically loadable extension modules. Similarly, dynamic modules are commonly used to extend web servers, browsers, and other large programming environments.
Although dynamic linking offers many benefits such as increased modularity, simplified maintenance, and extensibility, it has also produced a considerable amount of programmer confusion. Few programmers would claim to really know how dynamic linking actually works. Moreover, the runtime linking process depends heavily on the system configuration, environment variables, subtle compiler and linker options, and the flags passed to low-level dynamic loader. Needless to say, the interaction of these pieces tends to produce a very muddled picture of what is actually going on inside an application that uses shared libraries. To make matters worse, traditional debugging tools are of little assistance since they are primarily concerned with errors in program logic rather than errors that arise from the way in which a program is constructed and linked.
MONDO (Monitor of Dynamic Objects) that is designed to help programmers discover problems related to the run-time linking of an application. MONDO works by watching real-time debug traces generated by the run-time linker (ld.so.1) and using the output information to construct a global view of an application, its libraries, and dynamically loaded modules (if any). Using this information, it is possible examine symbol bindings, library dependencies, and to uncover subtle programming problems related to linking that are otherwise hidden from the programmer by the limitations of classic debugging tools.
Tkinter has been broken do to a reworking in the thread architecture.
The first initial release of mondo available for download to the public. All there gui interfaces are working, but not completely bug free. The solaris interface is not as optimized as the linux interface. MONDO supports multiple outup formats for both dependecy graphs and trees.
The following programs are required prior to the installation of MONDO.
Python 2.2: Earlier releases will not work.
SWIG >1.3.x: MONDO requires the 1.3.x release series for it's typemapping. There are known problems with version <1.3.17 so go for the latest release.
Graphviz 1.8.x: In order to generate library dependance graphs, Graphviz is required. Any recent very should work, but the developers use 1.8.10
GTK+ 2.0 + PyGTK or Tkinter or ncurses: Depending on which interface you want to use you'll need to make sure that various libaries as installed. The recommended interface is gtk. GTK+-2.0 and the latest version of PyGTK will need to be installed to use it. To use Tkinter, make sure python was build with tcl/tk support. If both of these are unavailable (or you want to run mondo across a very slow connection), a curses interface is available. This is built on top of the python curses module
GNOME-PYTHON is optional. It provides an integrated terminal when using gtk.
The first thing to do prior to installing MONDO is to make sure you have the correct/current versions of the listed programs in the requirements section. If you do not have these required programs, please follow the links from the MONDO home page located at http://systems.cs.uchicago.edu/mondo. The same page also contains release tarballs.
Now run make to build the necessary libraries and run make install to install mondo's files. The MONDO makefile accepts the following options to configure how things get build:
make PYINC=-I/opt/python/python-2.2/include/python2.2/ SWIG=/opt/swig/swig-1.3.17/bin/swig
In order to run on a variety of platforms, MONDO supports several interface libraries. On X11 MONDO is available using the tradition Tkinter widget set or using GTK2. One the console, MONDO uses the python 2.x curses module which is based on ncurses.
GTK is the default interface to MONDO and it will be selected automatically if no preference is given. It's important to note that GTK2 is a strict requirement. MONDO will not run with the gtk 1.x libraries. If you notice from the screenshot to the right, constant/variable symbols will appear purple and functions are will show up green. ZVT: If the gnome-python package is installed (and built the zvt module), MONDO will use it to provide an integrated terminal for the stdin/out/err of traced programs. The the package is not available, traced programs will use MONDO's stdio. Right-clicking on a session name (the proccess name) will display a menu that allows the you save the session, view verbose trace data, open the stdio window, and generate a library dependence graph. Right-clicking a function symbol (in green) will provide symbol information (currently a disassembly). The File menu allows opening of saved sessions, running new programs, and quitting the application. Pressing CTRL+r will allow you to start a new trace session. You'll also get a timestamp to differentiate sessions with the same name. |
|
Tkinter support has been discontinued as of release 0.10.
In order to use the curses gui use the -curses option. For example: mondo -curses [application] In text mode, MONDO splits it's functionality into several viewing contexts. These include:
|
|
MONDO is a real-time monitor of dynamic objects that allows users to trace linking and object dependencies through a variety of interfaces. MONDO's main interface is a table setup of libraries and symbols. From this initial GUI setup users are able to track which symbols are bound and which libraries are currently linked by the program. The user is able to use MONDO to generate a dependency graph via graphviz. In the case of programs that have a complicated linking dependency structure MONDO is able to run a graph reduction to eliminate loops and show struct linking dependencies. All three GUI interfaces work on both system platfroms for which MONDO is currently supported.
The Solaris build of MONDO uses the dis command to dissasemble the previously parsed symbols.
To check what trace data is available on your platform, try: env LD_DEBUG=help ls.
The Linux (x86) build uses objectdump to accomplish the dissasembly routine that dis accomplishes under solaris.
Below are the most fequently asked questions about how to use MONDO and all of its included features. If there is something that is not in the FAQ that you have a question about concerning the use of MONDO please email one of the authors.
To start a session in MONDO simply type mondo on the command line followed by the program you wish to monitor. Alternatively you can load MONDO without specifying any program and use the menu system of the gui to load programs into MONDO. The default GUI for MONDO is GTK, however, MONDO offers users the ability to specify a different GUI for compatability. To use TK simply type the -tk flag. Alternatively for the curses interface uses the -curses flag.
Saving a session in MONDO is dependant upon which GUI interface the user decides to work with. The instructions for each GUI are specified below.
Add FAQ stuff
Add FAQ stuff
Loading a session in MONDO is dependant upon which GUI interface the user decides to work with. The instructions for each GUI are specified below.
Add FAQ stuff
Add FAQ stuff
Loading multiple sessions as well as adding a new session to a currently loaded session in MONDO is dependant upon which GUI interface the user decides to work with. The instructions for each GUI are specified below.
Add FAQ stuff
Add FAQ stuff
Add FAQ stuff
Add FAQ stuff