Time travel debugging


Time travel debugging or time traveling debugging is the process of stepping back in time through source code to understand what is happening during execution of a computer program. Typically, debugging and debuggers, tools that assist a user with the process of debugging, allow users to pause the execution of running software and inspect the current state of the program. Users can then step forward in time, stepping into or over statements and proceeding in a forward direction. Interactive debuggers include the ability to modify code and step forward based on updated information. Reverse debugging tools allow users to step backwards in time through the steps that resulted in reaching a particular point in the program. Time traveling debuggers provide these features and also allow users to interact with the program, changing the history if desired, and watch how the program responds.

Characteristics supporting bi-directional travel

There are several characteristics that support the ability to move backwards as well as forwards in time.

Time traveling debuggers

Examples of debuggers with the ability to step backwards:
LanguageDebuggers
C++rr for x86 Linux, Undo UDB for Linux
RprovDebugR
PythonPyTrace
JavaScriptWallaby.js, Meiosis Tracer
C#RevDeBug
JavaRevDeBug for C# and Java, WhyLine for Java, Undo UDB
ElmElm Debugger, Elm Reactor
OCaml
GoUndo UDB for Linux
RustUndo UDB for Linux
Windows NativeMicrosoft Time Travel Debugging Tool for native Windows software,
eShard Full System Time Travel Analysis for Windows
Linux NativeeShard Full System Time Travel Analysis for Linux
AndroideShard Full System Time Travel Analysis for Android