UDB is an interactive time travel debugger for Linux C/C++ used in inner-loop development.
Debug a live process and replay the process's execution history to get instant visibility into what your process just did, and why.
Ideal for quickly debugging race conditions, segmentation faults, stackoverflow errors, double free or memory corruption.
▪️ Fix bugs faster by reducing debugging down to just one cycle
▪️ Get to the root cause of bugs with 100% certainty
▪️ Understand unfamiliar codebases
Download UDB to explore some of the features of time travel debugging.
Time travel debugging greatly improves team productivity in development.
▪️ Travel forward and backward in time to inspect program state
▪️ Replay program execution to understand exactly what went wrong and why
▪️ Simply see what happened rather than trying to figure it out
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 the 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 see what went wrong by just 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
▪️ Reduce onboarding ramp time: enable new joiners to get up to speed with the code faster
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.
Everyone who debugs C/C++ should be using time travel debugging. If you’re not using it, you’re just wasting time.
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.
Using UDB, I was able to step backwards in time in the current thread of execution to get to the last known good state. From there, I did a binary search through the intervening time to pinpoint when different pieces of the state changed and uncovered what code was responsible for those changes.
I put a watchpoint on the memory pointer and worked backwards towards the root cause. I quickly found where the crash happened and why.
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.
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.
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