Capture a live failing process and replay the process execution history to get instant visibility into what your process just did and why.
Ideal to quickly fix race conditions, segmentation faults, stackoverflow errors, double free or memory corruption in C/C++ programs running on Linux x86.
▪️ Fix bugs faster by reducing debugging down to just one cycle
▪️ Get to the root cause of bugs with 100% certainty
▪️ Understand unfamiliar codebases
Time travel debugging greatly improves team productivity in development. It is also ideal to debug test failures.
▪️ Travel forward and backward in time to inspect program state
▪️ Replay program execution to understand exactly what went wrong and why
▪️ Just see what happened rather than trying to figure it out
Based on GDB, UDB supports source-level debugging for programs written in C/C++, Rust and Ada. UDB delivers the full power of a modern debugger with variable and memory inspection, scripting, conditional breakpoints and watchpoints - all available in forward and reverse directions.
▪️ Time travel debugging (a.k.a. reverse debugging)
▪️ Single step backward or forward
▪️ Run backward or forward
▪️ Breakpoints & watchpoints - running forward or backward
▪️ Full inspection of global & local variable values
▪️ Bookmark points in your program’s execution history
▪️ Jump to specific a moment in time in your program’s execution
▪️ Full compatibility with GDB commands
▪️ CLI or IDE debugging
Play with the arrows above the animation on your left to get a mini taster of how UDB works.
Multithreaded and multi-process application architectures help improve performance; but they also increase the risk of challenging concurrency defects occurring, such as race conditions, shared memory corruption, or deadlocks.
UDB is ideal for rapidly debugging concurrency defects.
Read tutorial on how to debug C/C++ race conditions with UDB.
UDB is also used to rapidly identify the root cause of programming errors related to memory management such as:
▪️ Segmentation faults due to memory access violation
▪️ Double free
▪️ Memory corruption
▪️ Stack corruption i.e. buffer overrun
These can be hard to debug since the root cause may no longer be in scope. With UDB, you can just see what went wrong by travelling back in your program’s execution history.
Working on complex unfamiliar code you didn't write?
Quickly understand program behavior by navigating forward and backward in the program’s execution history.
Watch variable and memory changes as you navigate - forward and in reverse.
When dealing with unfamiliar code, there is a huge productivity benefit in being able to go backwards and forwards over the same section of code until you fully understand what it does.
UDB has helped us efficiently diagnose numerous challenging issues that would have taken much more time to resolve with GDB or other debuggers that are forward-looking with little or no reversibility.
I used UDB to examine registers to find the address of an object. Without UDB, it would have taken me twice as long to debug the problem. I would have ended up running the code over and over with full debug compile to catch the problem. With UDB, I can just back up to the root cause.
UDB runs on most modern Linux distributions and supports both 32 and 64-bit x86 programs. For more details, see the full list of system requirements.
Just UDB Binaries.
No, only user space.
UDB is currently used on some of the world’s most complex software, including heavily multithreaded applications and those using shared memory.
Check out the UDB Quick Reference guide for the full command set available.
Yes! We have an Educational License Program in place. Learn more