Reversible execution has not been fully exploited in symbolic debuggers. De
buggers that can undo instructions usually incur a significant performance
penalty during a debugging session. In this paper, we describe an efficient
reversible debugging mechanism based on program instrumentation. The appro
ach enables repetitive debugging sessions with selectable reversible routin
es and recording modes. Experimental results indicate that the execution pe
nalty can be significantly reduced with moderate code growth.