Efficient Algorithms for Bidirectional Debugging

Document Type

Conference Proceeding

Publication Date



This paper discusses our research into algorithms for creating an effcient bidirectional debugger in which all traditional forward movement commands can be performed with equal ease in the reverse direction. We expect that adding these backwards movement capabilities to a debugger will greatly increase its efficacy as a programming tool.

The effciency of our methods arises from our use of event counters that are embedded into the program being debugged. These counters are used to precisely identify the desired target event on they as the target program executes. This is in contrast to traditional debuggers that may trap back to the debugger many times for some movements. For reverse movements we re-execute the program (possibly using two passes) to identify and stop at the desired earlier point. Our counter based techniques are essential for these reverse movements because they allow us to effciently execute through the millions of events encountered during re-execution.

Two other important components of this debugger are its I/O logging and checkpointing. We log and later replay the results of system calls to ensure deterministic reexecution, and we use checkpointing to bound the amount of re-execution used for reverse movements. Short movements generally appear instantaneous, and the time for longer movements is usually bounded within a small constant factor of the temporal distance moved back.


Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation (PLDI '00). Association for Computing Machinery

Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee.

PLDI 2000, Vancouver, British Columbia, Canada. Copyright 2000 ACM 1-58113-199-2/00/0006 $5.00.