Visualization of Program Dependence Graphs

Thomas Würthinger
Institute for System Software
wuerthinger@ssw.jku.at


Abstract

The Java HotSpot™ server compiler of Sun Microsystems uses intermediate graph data structures when compiling Java bytecodes to machine code. The graphs are program dependence graphs, which model both data and control dependencies. For debugging, there are built-in tracing mechanisms that output a textual representation of the graphs to the command line.

This thesis presents a tool which displays the graphs of the server compiler. It records intermediate states of the graph during the compilation of a method. The user can then navigate through the graph and apply rule-based filters that change the appearance of the graph. The tool calculates an approximation of the control flow to cluster the nodes of the graph into blocks.

Using a visual representation of the data structures speeds up debugging and helps understanding the code of the compiler. The thesis describes the code added to the server compiler and the Java application that displays the graph. Additionally, the server compiler and the NetBeans platform are outlined in general.

Kurzfassung

Der Java HotSpot™ Server Compiler von Sun Microsystems benutzt Graphen als temporäre Datenstrukturen beim Kompilieren von Java Bytecodes zu Maschinencode. Die Graphen des Compilers sind Programmabhängigkeitsgraphen, mit denen sowohl der Kontrollfluss als auch die Datenabhängigkeiten modelliert werden. Für die Suche von Fehlern kann eine textuelle Repräsentation der Graphen auf die Kommandozeile ausgegeben werden.

Diese Arbeit beschreibt ein Programm zur Anzeige der Graphen des Server Compilers. Bei der Kompilierung einer Methode werden Zustände des Graphen aufgezeichnet. Der Benutzer kann durch den Graphen navigieren und regelbasierte Filter anwenden, um die graphische Anzeige des Graphen zu verändern. Das Programm berechnet eine Annäherung des Kontrollflusses, um die Knoten in Blöcke zu gruppieren.

Die Verwendung einer graphischen Repräsentation der Datenstrukturen beschleunigt die Fehlersuche und hilft den Quelltext des Compilers zu verstehen. Die Arbeit behandelt den Quelltext, der zum Server Compiler hinzugefügt wurde, und die Java Anwendung, die den Graphen anzeigt. Weiters werden der Server Compiler und die NetBeans Plattform beschrieben.


Master's thesis, Johannes Kepler University Linz, August 2007

Download as PDF