Have you ever set a breakpoint a few statements too late, or accidentally stepped over the function call that you wanted to step into, and wished that you could just reverse-execute the program in the debugger? This video from Microsoft Research describes an experimental time-traveling debugger inside the next-generation Microsoft Edge web browser. The system allows a developer to move the execution state of a debugged web page backwards and forwards in time. With fine-grained knowledge of how a page's state evolves, developers can dramatically reduce the effort needed to find and diagnose bugs.
Mark Marron and James Mickens introduce a new technique called interrogative virtualization that efficiently captures high-level application semantics, minimizing the size of the VM snapshots and event logs that the debugger uses to travel through time. Mark and James also describe how to leverage the browser's preexisting garbage collection infrastructure to further optimize the snapshot process. The result is a time travelling debugger which imposes negligible overheads at recording time, and which is fast enough at replay time to support interactive time-travel debugging.