  Debugging is an essential process with a large share of the development
effort, being a relentless quest for offensive code through tracing, inspection
and iterative running sessions. Probably every developer has been in a
situation with a clear wish to rewind time just for a while, only to retry some
actions alternatively, instead of restarting the entire session. Well, the
genie to fulfill such a wish is known as a reverse debugger. Their inherent
technical complexity makes them very hard to implement, while the imposed
execution overhead turns them to less preferable for adoption. There are only a
few available, most being off-line tools, working on recorded, previously run,
sessions. We consider live reverse debuggers both challenging and promising,
since they can fit into existing forward debuggers, and we developed the first
live reverse debugger on top of LLDB, discussing in detail our implementation
approach.
