Time travel debugging

Last updated

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. [1] 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. [2] Users can then step forward in time, stepping into or over statements and proceeding in a forward direction. [3] Interactive debuggers include the ability to modify code and step forward based on updated information. [4] 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. [5]


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:

C++ rr for x86 Linux, Undo UDB for Linux [9]
R provDebugR [10]
Python PyTrace [11]
JavaScript Wallaby.js, [12] Meiosis Tracer [13]
C# RevDeBug
Java RevDeBug for C# and Java, [14] WhyLine for Java, [15] Undo UDB
Elm Elm Debugger, Elm Reactor [16]
OCaml ocamldebug
Go Undo UDB for Linux [17]
Rust Undo UDB for Linux [18]
Windows Native Microsoft Time Travel Debugging (TTD) Tool [19] for native Windows software (x86, x64, ARM, ARM64 [20] ), eShard esReven Full System Timeless Analysis for Windows [21]
Linux NativeeShard esReven Full System Timeless Analysis for Linux [22]

See also

Related Research Articles

In computing, a core dump, memory dump, crash dump, storage dump, system dump, or ABEND dump consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated abnormally. In practice, other key pieces of program state are usually dumped at the same time, including the processor registers, which may include the program counter and stack pointer, memory management information, and other processor and operating system flags and information. A snapshot dump is a memory dump requested by the computer operator or by the running program, after which the program is able to continue. Core dumps are often used to assist in diagnosing and debugging errors in computer programs.

<span class="mw-page-title-main">Debugger</span> Computer program used to test and debug other programs

A debugger or debugging tool is a computer program used to test and debug other programs. The main use of a debugger is to run the target program under controlled conditions that permit the programmer to track its execution and monitor changes in computer resources that may indicate malfunctioning code. Typical debugging facilities include the ability to run or halt the target program at specific points, display the contents of memory, CPU registers or storage devices, and modify memory or register contents in order to enter selected test data that might be a cause of faulty program execution.

SoftICE is a kernel mode debugger for DOS and Windows up to Windows XP. It is designed to run underneath Windows, so that the operating system is unaware of its presence. Unlike an application debugger, SoftICE is capable of suspending all operations in Windows when instructed. Because of its low-level capabilities, SoftICE is also popular as a software cracking tool.

A disassembler is a computer program that translates machine language into assembly language—the inverse operation to that of an assembler. Disassembly, the output of a disassembler, is often formatted for human-readability rather than suitability for input to an assembler, making it principally a reverse-engineering tool. Common uses of disassemblers include analyzing high-level programing language compilers output and their optimizations, recovering source code of a program whose original source was lost, malware analysis, modifying software, and software cracking.

In-circuit emulation (ICE) is the use of a hardware device or in-circuit emulator used to debug the software of an embedded system. It operates by using a processor with the additional ability to support debugging operations, as well as to carry out the main function of the system. Particularly for older systems, with limited processors, this usually involved replacing the processor temporarily with a hardware emulator: a more powerful although more expensive version. It was historically in the form of bond-out processor which has many internal signals brought out for the purpose of debugging. These signals provide information about the state of the processor.

WinDbg is a multipurpose debugger for the Microsoft Windows computer operating system, distributed by Microsoft. Debugging is the process of finding and resolving errors in a system; in computing it also includes exploring the internal operation of software as a help to development. It can be used to debug user mode applications, device drivers, and the operating system itself in kernel mode.

OllyDbg was an x86 debugger that emphasizes binary code analysis, which is useful when source code is not available. It traces registers, recognizes procedures, API calls, switches, tables, constants and strings, as well as locates routines from object files and libraries. It has a user friendly interface, and its functionality can be extended by third-party plugins. Version 1.10 is the final 1.x release. Version 2.0 was released in June 2010, and OllyDbg has been rewritten from the ground up in this release. Although the current version of OllyDbg cannot disassemble binaries compiled for 64-bit processors, a 64-bit version of the debugger has been promised.

In computing, data transformation is the process of converting data from one format or structure into another format or structure. It is a fundamental aspect of most data integration and data management tasks such as data wrangling, data warehousing, data integration and application integration.

Microsoft Script Debugger is relatively minimal debugger for Windows Script Host-supported scripting languages, such as VBScript and JScript. Its user interface allows the user to set breakpoints and/or step through execution of script code line by line, and examine values of variables and properties after any step. In effect, it provides a way for developers to see script code behavior as it runs, thus eliminating much of the guess-work when things do not quite work as intended.

<span class="mw-page-title-main">Firebug (software)</span> Web development add-on for Firefox

Firebug is a discontinued free and open-source web browser extension for Mozilla Firefox that facilitated the live debugging, editing, and monitoring of any website's CSS, HTML, DOM, XHR, and JavaScript.

Program animation or stepping refers to the debugging method of executing code one instruction or line at a time. The programmer may examine the state of the program, machine, and related data before and after execution of a particular line of code. This allows the programmer to evaluate the effects of each statement or instruction in isolation, and thereby gain insight into the behavior of the executing program. Nearly all modern IDEs and debuggers support this mode of execution.

<span class="mw-page-title-main">Xdebug</span> PHP extension used for debugging and profiling

Xdebug is a PHP extension which provides debugging and profiling capabilities. It uses the DBGp debugging protocol.

In computer programming and software development, debugging is the process of finding and resolving bugs within computer programs, software, or systems.

<span class="mw-page-title-main">Elm (programming language)</span> Functional programming language

Elm is a domain-specific programming language for declaratively creating web browser-based graphical user interfaces. Elm is purely functional, and is developed with emphasis on usability, performance, and robustness. It advertises "no runtime exceptions in practice", made possible by the Elm compiler's static type checking.

<span class="mw-page-title-main">GraalVM</span> Java virtual machine

GraalVM is a Java VM and JDK based on HotSpot/OpenJDK, implemented in Java. It supports additional programming languages and execution modes, like ahead-of-time compilation of Java applications for fast startup and low memory footprint. The first production-ready version, GraalVM 19.0, was released in May 2019. The most recent version is GraalVM 23.0.0 , made available in June 2023.

Malware analysis is the study or process of determining the functionality, origin and potential impact of a given malware sample such as a virus, worm, trojan horse, rootkit, or backdoor. Malware or malicious software is any computer software intended to harm the host operating system or to steal sensitive data from users, organizations or companies. Malware may include software that gathers user information without permission.

Data lineage includes the data origin, what happens to it, and where it moves over time. Data lineage provides visibility and simplifies tracing errors back to the root cause in a data analytics process.

<span class="mw-page-title-main">Visual Studio Code</span> Source code editor developed by Microsoft

Visual Studio Code, also commonly referred to as VS Code, is a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code completion, snippets, code refactoring, and embedded Git. Users can change the theme, keyboard shortcuts, preferences, and install extensions that add functionality.

<span class="mw-page-title-main">Katalon Studio</span> Automation testing software tool

Katalon Platform is an automation testing software tool developed by Katalon, Inc. The software is built on top of the open-source automation frameworks Selenium, Appium with a specialized IDE interface for web, API, mobile and desktop application testing. Its initial release for internal use was in January 2015. Its first public release was in September 2016. In 2018, the software acquired 9% of market penetration for UI test automation, according to The State of Testing 2018 Report by SmartBear.


  1. "Time Travel Debugging in WinDbg Preview!". Debugging Tools for Windows. Retrieved 2018-05-08.
  2. Telles, Matthew; Hsieh, Yuan (2001-04-01). The Science of Debugging. Coriolis Group Books. ISBN   9781576109175.
  3. "Reverse debugging, time travel debugging". undo.io. Retrieved 2018-05-08.
  4. "Interactive Debugging With Node.js - DZone Web Dev". dzone.com. Retrieved 2018-05-08.
  5. "Elm's Time Travelling Debugger". debug.elm-lang.org. Retrieved 2018-05-08.
  6. "interactive programming". elm-lang.org. Retrieved 2018-05-08.
  7. "Hot reloading and time travel debugging: what are they?". Code Cartoons. 2015-10-21. Retrieved 2018-05-08.
  8. "6 Things You Should Know About Time Travel Debugging". undo.io. Retrieved 2018-05-08.
  9. "UDB - Time Travel Debugger for C/C++".
  10. "ProvTools/provDebugR". github.com. 2018-07-31. Retrieved 2018-07-31.
  11. "PyTrace Time Travel Debugger for Python".
  12. "Wallaby.js Introduction: Time Travel Debugger". wallabyjs.com. Retrieved 2020-02-27.
  13. Donut, Fox (2018-04-29). "You Don't Need Redux, MobX, RxJS, Cerebral". Fox Donut. Retrieved 2018-05-24.
  14. "About RevDeBug". revdebug.com. Retrieved 2020-03-28.
  15. "Whyline for Java". cs.cmu.edu. Retrieved 2021-01-21.
  16. "time travel made easy". elm-lang.org. Retrieved 2018-05-08.
  17. "Greg Law on Debugging, Record & Replay of Data, and Hyper-Observability".
  18. "Greg Law on Debugging, Record & Replay of Data, and Hyper-Observability".
  19. DOMARS. "Time Travel Debugging - Overview". docs.microsoft.com. Retrieved 2018-05-08.
  20. "Get WinDbg Preview". Microsoft .
  21. "Full System Timeless Analysis for Windows".
  22. "Full System Timeless Analysis for Linux".