Abstraction and Visualization in Graphical Debuggers (Thesis)
As computer systems become increasingly pervasive, the size and
complexity of software grows. An inevitable consequence of such
growth is the presence of software errors, for which half of
development time is spent correcting. Debuggers facilitate tracking
and correcting errors by increasing the visibility of a program.
This thesis examines how debuggers can be constructed that enhance
visibility of software by presenting programs at a higher level of
abstraction. In particular, we describe the construction of three
systems. The first system, Deet, addresses problems that arise in
the implementation of graphical debuggers. It focuses on aspects of
portability, language-independence and complexity. Deet works with
a variety of operating systems, languages and architectures by
separating machine-dependent pieces of the debugger into a minimal
component called a nub. The second system, Chava, provides
visualization of object code and can display relationships such as
class inheritance diagrams, call graphs, and module dependencies.
Chava also supports comparison between two versions of a program,
and is useful for reverse engineering applications. The third system,
TraVis, provides visualization of program data in the debugger.
TraVis draws data structures using a technique called traversal-based
visualization, in which the user defines how in-core objects are
turned into on-screen entities as they are traversed by the debugger.
The mappings make it possible to display data at a higher semantic
level without modification of source code.