A Case for Dynamic Reverse-code Generation

Authors

  • Jooyong Lee

DOI:

https://doi.org/10.7146/brics.v14i15.22179

Abstract

Backtracking (i.e. reverse execution) helps the user of a debugger to naturally think backwards along the execution path of a program, and thinking backwards makes it easy to locate the origin of a bug. So far backtracking has been implemented mostly by state saving or by checkpointing. These implementations, however, inherently do not scale. As has often been said, the ultimate solution for backtracking is to use reverse code: executing the reverse code restores the previous states of a program. In our earlier work, we presented a method to generate reverse code on the fly while running a debugger. This article presents a case study of dynamic reverse-code generation. We compare the memory usage of various backtracking methods in a simple but nontrivial example, a bounded-buffer program. In the case of non-deterministic programs such as this bounded-buffer program, our dynamic reverse-code generation can outperform the existing backtracking methods in terms of memory efficiency.

Published

2007-11-15

How to Cite

Lee, J. (2007). A Case for Dynamic Reverse-code Generation. BRICS Report Series, 14(15). https://doi.org/10.7146/brics.v14i15.22179