Even with modern software development methodologies, the actual debugging of source code, i.e., location and identification
of errors in the program when errant behavior is encountered during testing, remains a crucial part of software development.
To apply model-based diagnosis techniques, which have long been state of the art in hardware diagnosis, for automatic debugging,
a model of a given program must be automatically created from the source code. This work describes a model that reflects the
execution semantics of the Java language, including exceptions and unstructured control flow, thereby providing unprecedented
scope in the application of model-based diagnosis to programs. Besides the structural model building process, a behavioral
description of some of the model components is given. Finally, impacts of the modeling decisions on the diagnostic process
are considered.