  This paper presents a logic based approach to debugging Java programs. In
contrast with traditional debugging we propose a debugging methodology for Java
programs using logical queries on individual execution states and also over the
history of execution. These queries were arrived at by a systematic study of
errors in object-oriented programs in our earlier research. We represent the
salient events during the execution of a Java program by a logic database, and
implement the queries as logic programs. Such an approach allows us to answer a
number of useful and interesting queries about a Java program, such as the
calling sequence that results in a certain outcome, the state of an object at a
particular execution point, etc. Our system also provides the ability to
compose new queries during a debugging session. We believe that logic
programming offers a significant contribution to the art of object-oriented
programs debugging.
