This paper describes a prototype implementation of reversible debugging, using entirely Free Software - GDB and QEMU. We explain how source-level debugging actions are built on top of primitive operations, how the primitive operations are implemented, and how the simulated environment interacts with the outside world.
A reversible debugger offers both standard debugger operations (e.g. step and next) and reverse execution equivalents that rewind the program’s state. Even on simple programs, this is convenient: for instance, if you identify a bad memory write, it allows you to step backward and see the value that was in memory before it was overwritten. In more complex systems, reversible debugging allows you to examine the environment at and before an intermittent fault.