Topic 3: reverse-execution debugging
•Context:
–When debugging, you would really like to step the program backwards, from the fault point to the point of the bug.
•Problem:
–Debuggers do not support back-stepping mainly because they cannot undo any instruction: i.e., recover memory & register state prior the statement.
•Solution:
–Take regular checkpoints of program state. 
–Now we can roll back to any checkpoint.
–But cost of checkpoints is overhead.
–Key problem: how to make checkpoints sparse, yet provide the illusion that we can undo statements any granularity (i.e., back step across any single instruction)?
•Papers:
–Algorithms for bidirectional debugging, Boothe.
–Software Instruction Counter, Mellor and Crummey.
–Optimal incremental rexecution, Netzer and Weaver.