'Reason back from the state of the crashed program to determine what could have caused this. Debugging involves backwards reasoning, like solving murder mysteries.'
Brian Kernighan & Rob Pike, 1999: The Practice of Programming
Debugging is like solving a murder mystery: the developer must think backwards to work out what went wrong. A reversible debugger is to a developer as CCTV footage of the murder scene is to a detective. Bugs that would have taken weeks to solve can now be solved in minutes.
Reversible debugging is the ability to step your application backwards as well as forwards. It has been a holy-grail of development tools research for several decades. There have been many implementations, but Undo is the first to offer the performance and scalability required for debugging complex software, specifically for Linux.
Software bugs are a problem for developers and for business. Not only do developers spend a huge amount of their time debugging, but the unpredictability of bugs makes managing software projects a thankless task. As well as affecting software quality, bugs are a primary cause of slipped development schedules.
Traditional debugging uses single stepping that starts your program running only to freeze it immediately afterwards. Undo does more, allowing you to inspect any part of your program's state at any time. With Undo on your Linux box, you can:
Jump to any point in your program's history.
Step back to the preceding instruction, source line, function call or breakpoint.
Run back to a watchpoint to discover when a variable (or any memory location) was last changed (perfect for memory corruption bugs).
Replay non-deterministic bugs (when you go forwards again, your program will follow exactly the same path as last time).