Make bugs 100% reproducible with time travel debugging
LIVERECORDER FOR C/C++

Make bugs 100% reproducible and start debugging failures instantly

LiveRecorder provides a one-click workflow from a test failure to a time-travel debugger placed exactly at the point of failure – skipping the tedious steps usually required to reproduce the problem and enabling developers to start debugging test failures instantly.

Developers working on complex C/C++/Go/Java software can now save a huge amount of time diagnosing the root causes of new regressions, legacy bugs, and flaky tests. Bugs that took days or weeks to fix can now be resolved in hours.

Built for heavily multithreaded applications, multiprocess programs, software using third-party components (e.g. open source), or single-threaded large legacy codebases.

25–50%
of developer time
is spent on debugging rather than innovating
91%
of software developers admit
to having defects which remain unresolved because they cannot reproduce the issue
82%
of software vendors
have experienced issues in production related to previously seen but unfixed test failures.
Record

Record CI / System Test failures

Automatically record CI / System Test failures to capture the execution of failing test runs, including intermittent failures. Recordings capture all non-deterministic data (down to instruction level) and recreate your application’s entire memory and the register state – on demand and with minimal overhead.

No time needs to be spent reproducing the issue or any environmental conditions that contributed to it. Developers can start debugging test failures instantly.

Store the recordings in your CI or bug-tracking system for later analysis and cross-team collaboration.

LiveRecorder integrates with all popular CI automation tools, including Jenkins, Maven, Circle CI, and TeamCity. The core recording technology is language independent and compatible with most mainstream Linux distributions.

REPLAY

Replay recordings anytime, anywhere

Launch a ready-to-go debug session in your browser with a one-click workflow: Jump from a test failure (or bug report) straight into a fully set up replay session of the recording that captured the bug. The in-browser debugger is based on Visual Studio Code (with Undo-specific additions/alterations), providing an easy-to-use UI to debug.

Debug locally or remotely: Recordings are portable, allowing developers to debug anytime and on any machine (out of the original environment).

Collaborate across teams and time zones: Recordings are shareable for effective asynchronous collaboration (share recordings, add comments, etc.).

RESOLVE

Debug the recording with time travel debugging

Analyze execution history and get instant visibility into what your program did, and why.

Debug a failed CI or QA run from days, weeks, or months ago. The application behavior is 100% reproducible each time the recording is replayed.

Key features

LiveRecorder features

LiveRecorder comes packed with enterprise features to handle even the most complex of applications – including heavily multithreaded or multiprocess applications, programs running on the cloud, virtual environments, etc.

Faster Than You Think
With our specialized technology (including Parallel Search), expect to see a 2x–5x slowdown on most programs. Note: You only need to record the failed tests (not all of them) and you only need to record once to make that test run 100% reproducible.
Time Travel Debugging
Replay recordings forward and backward to inspect full application state, including the contents of all variables and the heap. Time travel back to any point in application execution history, even if it's weeks ago!
Multi-Process Correlation
Reveals the order in which processes and threads alter data structures in shared memory. Learn more about multi-process correlation for shared memory.
Thread Fuzzing
Randomizes thread execution to expose concurrency bugs in multithreaded codebases. Learn more
Integration and Control
APIs, CLI, front-end and container platform integrations help you automate and enrich QA and CI processes.
Compiler- and Library-Agnostic
We don’t require the application to be recompiled or linked against particular libraries.
Log Jump
A powerful method for developers to jump from a log line of interest to the corresponding point in time in a LiveRecorder recording. Learn more
Post Failure Logging
Generates log files after a software failure occurs. The log files can be debugged remotely, without the recording file ever leaving the customer’s secure environment and without IP/IIP sensitive data being exposed. Learn more
Dynamic logging
Log additional variables at replay-time to cater for “I wish we’d logged that other variable” moments. See what the output would have been without needing to re-run

Competitor comparison

LiveRecorder vs. traditional debugging

LiveRecorder makes debugging predictable – unlike logging, core dumps, printf or standard debuggers. The recording will always behave in the same way anytime, anywhere, and for everyone; no more “works on my machine!”.

By allowing all developers to explore how the code is executed, developers new to the codebase can debug just as efficiently as more experienced team members.

Capabilities
LiveRecorder
Logging, dumps, printf
GDB and IDE debug modes
Bug capture (including intermittent bugs) is automated
Explore how the code is executed dynamically - every line of code in every thread, every variable, every I/O
Go back to something that happened last week/month
Allows collaboration on the same issue
See what the software really did (not what it was expected to do)

What customers say

FAQ

Common questions

Here are some frequently asked questions and answers you may find helpful. Detailed technical documentation is also available in the Docs

  • We use binary instrumentation to capture only the bare minimum data required to record execution as efficiently as possible. To keep the overhead low, we don't translate instructions that don't require it.

  • The recording contains all information required to recreate the entire memory state of the recorded process at any machine instruction that was recorded. This includes:

    • Copy of executable, shared libraries and symbolic debugging information.
    • I/O — File system, system calls, network or IPC data. File data loaded into process memory.
    • Non-deterministic inputs like Unix Signals, Thread Switch events, and Shared Memory reads.
    • Process snapshots (one or more) of process memory space, including Shared Memory.
  • LiveRecorder is capable of handling multi-threaded applications. Some of our customers record applications with 30-40 active threads and 100s of less active threads. For example it is used on SAP HANA - a heavily multithreaded application that uses custom memory allocators, custom threading libraries and that typically runs on a machine with 100s of cores and terabytes of RAM. Read case study

C/C++

Request a demo

REQUEST A DEMO