For Linux C/C++/Java/Kotlin/Go/Rust
Find defects before your customers do
Time travel debugging (for large-scale codebases) that just works
100% compatible with GDB, so no need to learn a new tool – just a handful of new commands. Also available as a Visual Studio Code extension or CLion plugin.
What is
Time Travel Debugging?
Record a process. Replay the recording.
Reconstruct and examine the full state of the program at any point in time. Step back in the execution history to inspect the code flow to see what happened.
Record
Record the bug (on demand or in automated test), capturing the full program execution in a single binary file.
No code or build changes are required thanks to Undo’s just-in-time binary instrumentation.
Replay
Any question you have can be answered from a recording. No more “how did that happen?”.
Recordings are portable, so they can be replayed outside of the original environment and shared with your team.
Resolve
Examine the full state of the program at any point. Go back and forward in time with ease.
Trace from symptom to root cause in one cycle – without having to restart your debug session or recompile.
Solve your hardest bugs, fast
- Step backward or forward, or jump to any point in the execution history to see what happened – without having to restart the process again
- Quickly rewind to the point of failure in the debugger to understand the root cause
- Diagnose memory corruptions, race conditions, intermittent bugs, or incorrect behaviors within hours, not weeks
Watch the Demo
Understand Code You Didn’t Write
Unfamiliar with the codebase? No problem! You don’t have to have it all in your head.
A recording captures the whole execution history – every line of code in every thread, every variable, every I/O. So all you have to do is to rewind and fast-forward in time in the recording to observe how state changes and why the code behaves the way it does.
- Get a picture of code flow by exploring how the code is executed dynamically
- See exactly what happened and how it happened
- Understand subtle interactions amongst complex components
Many real-world programs can be recorded running at better than half-speed. Others will be a bit worse – in general, expect 1.5x-5x slowdown per thread (YMMV).
Undo’s dynamic just-in-time instrumentation captures only the minimum data required to replay the process – 99% of the program state can be reconstructed on demand, only the non-deterministic inputs need be recorded.
Undo’s customers record applications:
- with dozens of active threads and 100’s of less active threads
- using custom memory allocators, custom thread libraries
- running on machines with 100’s of cores and terabytes of RAM
For example, the SAP HANA Cloud engineering team invests in the most advanced technologies to ensure stable releases. The team uses Undo’s time travel debugging (combined with thread fuzzing) to debug their highly-multithreaded application with around 5 million lines of productive C++ code. No known bug remains unresolved.
To record memory states, the Undo engine relies on the copy-on-write semantics provided by the operating system, so the memory footprint can be kept relatively low (typically 2x that of the process you are recording).
We can also tune Undo’s behavior adaptively to available RAM.
Undo comes as on-premise software, so your data lives with you.
A good proportion of our customers use Undo in production to resolve customer issues orders of magnitude faster than with decade-old debugging practices.
👉 Check out customer stories from Synopsys, Siemens EDA, Cadence or Altair
Undo has the technology to record almost any kind of interaction between the process being recorded and the kernel.
Some of Undo’s customers are networking companies, using very specialized hardware and kernels. Some kernel interactions involving custom devices require optimization by Undo to have good reliability and performance.
Yes – with Undo, you can record multiple, communicating processes running as part of a larger service and then debug them all from the comfort of your development machine.
No need to attach a debugger to multiple nodes of your cluster or to pause components whilst the system is in operation.
Watch this video for an example that traces a bug to the originating node – and to the bad source line – within a distributed C program.
No. No kernel changes or settings, no kernel modules. No special compilation steps either. It just works.
Undo’s technology is based on deterministic process recording. Unlike AI analyses, there is no possibility of hallucination: if a recording says the application did something, then it really did and it could happen again in production. No ifs, buts or maybes.
If you’re already using AI to understand the structure of your code, then consider also using Undo to understand the dynamic behavior of your code. By stepping forward and backward through a recording program, you can see how components interact at runtime.
Undo’s software is designed for Linux, running on x86, x86_64 and ARM64 devices.
We don’t support Risc-V, PPC or MIPS. We cannot record on Windows, MacOS, any of the BSDs or any other OS that is not Linux. On Linux we do support a huge variety of kernel versions and distros.
We cannot record code executed by GPUs, but we can record the CPU side of the interaction with a GPU and, sometimes, that’s all you need.
SOUNDS GOOD BUT I HAVE
MORE QUESTIONS…
We offer different options to suit your needs. For more info, please see our pricing & licensing page.
Yes, of course. Just get in touch so we can help with your specific use case. Or check out some generic guidance at the bottom of the the pricing & licensing page.
Don’t worry, we’ve developed a feature that allows you to use recordings to generate logs.
WATCH HOW IT WORKS
Integrates with all popular
CI / Test Automation Tools & IDES
Step Into A
Time Machine
- See what your software really did
- Solve hard bugs – fast
- Understand unfamiliar codebases
No extra set up steps required.
Get started in 2 minutes.