UndoDB: a reversible debugging tool for Linux and Android

UndoDB is a high-performance record-and-replay reversible debugging tool for Linux and Android.

Start your fully functional free trial

What is UndoDB?

UndoDB's performance and low memory consumption allows you to step your application backwards, as well as forwards, faster than any other commercial or open-source reversible debugger. By stepping back in your program, setting a watchpoint or replaying non-deterministic bugs, you can get straight to the root cause of the bugs upsetting your customers, decreasing your productivity and slowing your software releases.



Trusted by

Start your fully functional free trial

Reversible debugging that really works

UndoDB uses a "snapshot-and-replay" technique, which stores periodic copy-on-write snapshots of the application and non-deterministic inputs (system calls, thread-switches, shared memory reads, etc). This means a typical CPU-intensive application can run with just 1.7x slow-down compared to native execution, and IO bound applications at close to native speed. Memory requirements are also (comparatively) extremely low.

Native UndoDB GDB Process Record*
Time 1.49s 2.16s (1.75x) 21 Hours (50,000x)
Space N/A 17.8MB 63GB

GDB times extrapolated from 16k file. Benchmarks performed on Intel(R) CPU E5-26200@2.00 GHz with FSF gdb 7.6

Being quicker when fixing bugs

Debugging dominates software development. By augmenting familiar debugging operations with reverse counterparts, bugs that would usually take days or weeks to solve can - literally - be found and fixed in minutes. The return on investment here is clear: the less time developers spend debugging, the more time they spend adding value to your business; being quicker when fixing bugs enables you to release better quality software, hit your schedules and delight your customers.

Try it for free

Quality is a non-negotiable aspect of our software development. When we do encounter bugs we need to resolve them as quickly as possible. Recently we had an intermittent issue and were unable to resolve it using traditional debugging techniques. We switched to an Undo session and we were able to run in reverse to locate the root cause in a matter of a few hours. Undo enabled us to resolve this issue and quickly provide a fix for our customer.

Jonathan DeKock
Senior Software Architect
Cadence Design Systems


How other people use Undo Products

You don’t have to take our word for it. Some of the world’s leading software companies are already using UndoDB to revolutionise their approach to debugging, saving hours if not days every time they find a bug. To give a more detailed understanding of how UndoDB can transform your workflow, just take a look at our most recent case study. This shows how Cadence integrated UndoDB with its existing workflows to find bugs that were previously proving impossible to locate. To read it, simply download the pdf below.

Download a case study

How to install and use

Downloading and running

Each license is associated with a unique URL that will always link to the latest version of UndoDB for that license. For example, to download, simply:

$ wget http://undo-software.com/cgi-bin/undodb.tgz?p=57d1dc6b3f5d4503e6708cf0
$ tar -xzf undodb.tgz?p=57d1dc6b3f5d4503e6708cf0
$ cd undodb-3.5.89/
$ ./undodb-gdb -q ./a.out
undodb-gdb: Reversible debugging system. Copyright 2006 - 2012 Undo Ltd.
undodb-gdb: undodb-3.5.89
undodb-gdb: By running this software you agree to the terms in:
undodb-gdb: /downloads/undodb-3.5.89/demo_license.html
Reading symbols from /downloads/undodb-3.5.89/a.out...done.


A makefile is provided with an `install' rule that will install undodb-gdb in /usr/local/bin. e.g.

$ cd ~/downloads/undodb-3.5.89/
$ sudo make install

installing undodb-3.5.89 to lib=/usr/local/lib bin=/usr/local/bin man=/usr/local/man
mkdir -p /usr/local/lib/undodb-3.5.89 /usr/local/bin /usr/local/man/man1
cp -pr * /usr/local/lib/undodb-3.5.89/
cd /usr/local/bin && ln -f -s /usr/local/lib/undodb-3.5.89/undodb-gdb
cd /usr/local/man/man1 && ln -f -s /usr/local/lib/undodb-3.5.89/undodb-gdb.1
cd /usr/local/man/man1 && ln -f -s /usr/local/lib/undodb-3.5.89/undodb-limits.1

have created:
lrwxrwxrwx 1 root root 45 May 23 10:48 /usr/local/bin/undodb-gdb -> /usr/local/lib/undodb-3.5.89/undodb-gdb
drwxr-xr-x 3 root root 4096 May 23 10:48 /usr/local/lib/undodb-3.5.892/
lrwxrwxrwx 1 root root 47 May 23 10:48 /usr/local/man/man1/undodb-gdb.1 -> /usr/local/lib/undodb-3.5.89/undodb-gdb.1
lrwxrwxrwx 1 root root 50 May 23 10:48 /usr/local/man/man1/undodb-limits.1 -> /usr/local/lib/undodb-3.5.89/undodb-limits.1

undodb is now installed.

$ undodb-gdb -q
undodb-gdb: Reversible debugging system. Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 Undo Ltd.
undodb-gdb: undodb-3.5.89
undodb-gdb: By running this software you agree to the terms in:
undodb-gdb: /usr/local/lib/undodb-3.5.89/demo_license.html

Using undodb-gdb at the command-line

undodb-gdb is a drop-in replacement for gdb. There are some differences though:

    • Recording is enabled by default (to start with recording disabled, pass the --undodb-defer-recording command line option).
    • The speed and space performance impact of enabling recording is many orders of magnitude reduced.
    • The gdb record prefixed commands are unavailable, generally replaced by the superset UndoDB commands that start undodb- (hit undodb-[TAB] at the command-line to see a list of undodb- commands).

Apart from the above difference, undodb-gdb can be used exactly as one would use gdb.

Using undodb-gdb from graphical frontends

Because undodb-gdb is a drop-in replacement for gdb, it can be used from graphical debugger frontends to gdb, such as DDD, Eclipse and Emacs. (See here for more details).

Using UndoDB from Emacs, DDD and Eclipse