

           ObjDive - a tool for displaying object dependencies 


Purpose
=======

ObjDive enables you to interactivly visualise dependencies between object 
files. It instruments 'nm' to request the information about the implemented
symbols and external references of each object file. Each object file is
displayed as a node. They are connected by arrows - representing references
between two nodes. The origin of an arrow is the caller node, the arrowhead
points to the callee. For getting an idea of how much depend two nodes
to each other - the thickness of the arrows depends on the number of 
references from the caller node to the callee node. 

Usage
=====

To start objdive - just specify the object file you want to dive in
as arguments at the command line. The main window will pop up and
will one node for each object file at the left side of your 'desk'.
To display the dependencies of several objects just drag them to
the right (work-) area. The currently selected node and all its outgoing
connections will appear in a blue color. So you can get a good idea of
which objects are referenced by your selected node. 

You can move multiple nodes at the same time by defining a rubberbox. 
Just try clicking on the background and drag the mouse while clicking. 
After defining the rubberbox you can drag it including all nodes inside 
the rubberbox area.

To get more detailed information about the currently selected node you
can open the 'Node Information' window. It displays the lists of implemented
symbols, external references and used symbols, which are not part of the 
set of specified objects. When clicking at an external reference the
object file where the external reference is implemented will be shining in
a red color. 

The edge information window is capable of showing the information behind
an arrow (the set of interface functions). Just click on the arrow of your
interest.

The slider on the bottom of the main window defined a dependency threshold.
Here you can defined which degree of dependencies (number of references) you 
want to see. This is a nice tool to arrange nodes: firstly set the slider 
to a high value - now only the connections of highly dependent nodes are 
visible. After arranging them you can set the threshold lower to take 
lower dependencies into account.

The current node positions can be saved and loaded using the file menu.
Additionally you can export the current configuration as PostScript.

There is a built-in feature to remote-control vim for displaying 
source-code. For doing this objdive assumes that object files are in the
same directory as their corresponding c-files. The remote controlled vim
can be started using the small expect-script 'vimserver'. It starts a
vim session and forwards commands, which are coming in via a socket call
to vim. When clicking on an implemented symbol, vim will display the
implementation. When clicking on an external or undefined symbol, vim will 
display the position in your selected note source code, where the symbol 
is used. When clicking on an interface symbol (Edge Information window)
the caller is displayed. Note that your can press 'n' in the vim window
to get to the next position within the source code, where the symbol is
used.

Tweaking and Configuring
========================

Type 'vim objdive' and use 'i' to make changes on objdive .-)

Licence
=======

Object Dive is released on the terms of the GNU general public licence v2.


have fun while diving...

Norman Feske
