Frequently Asked Questions
Got questions? We’ve got the answers.
11 FAQs
I’m pretty sure I’ve heard of reversible debuggers in the past. What is different about UndoDB?

UndoDB is unique in that it is able to record with low overheads and without restriction on CPU make/model, execution environment (e.g. AWS), and comes with a host of features, including support for shared memory, deferred recording, live reversible debugging, attaching to a running process, and many more.

Will UndoDB change our developers’ environment?

No. UndoDB can be used from various frontends e.g. Emacs, Eclipse, DDD or from the command line. This means UndoDB can be integrated into your developers’ existing workflow, making it quick and easy to get up and running.

Which Linux distributions does UndoDB work on? Any other operating systems supported?

UndoDB works on any Linux distro with kernel 2.6 or later, on ARM or x86. UndoDB also supports Android (Native) on ARM.

What is the largest program UndoDB has been used on?

The number of lines of source is not directly relevant to UndoDB. Instead, it’s the size of the resulting program and its data that matters. We have customers that use UndoDB on programs that consume more than 100GB of memory.

Does UndoDB require root access?

No.

Can UndoDB be used to debug Kernel code?

No – UndoDB is for user-mode code only.

Does UndoDB cope with self-modifying code?

Yes.

How are non-deterministic events, such as reading from a socket or file-system, handled?

During record mode, the effects of all non-deterministic operations, including all system calls, thread-switches, signals and shared memory accesses, are stored in an event log. During replay, non-deterministic events are not performed directly, but their effects are synthesized based on the contents of the event log.

I have a program that takes a long time to exhibit a bug. If UndoDB slows down execution, won’t it take even longer?

Yes. However, when debugging using traditional tools, it’s often necessary to restart the program multiple times. UndoDB saves time because you can go backward and forward as often as you need without having to restart. For a further speedup it’s possible to defer the start of recording until later in the program’s execution.

Does replaying a process in UndoDB have external side-effects, e.g. controlling a GUI or attached devices?

No, replaying process is self-contained and does not re-execute system calls. From outside (except via the debugger), the process appears to have frozen at the moment the recording stopped.

Is it possible to modify program state in replay mode?

No, you can’t go back in time to change history. The reason is that in replay mode your application is disconnected from the outside world. Consider a webserver sending a page on a socket. If you go back to mid-way through the page’s transmission, change something and attempt to begin a new recording from that point, the webserver would send the second half of the page twice, very likely confusing the other end of the socket.