The Undo Engine performs a JIT (just-in-time) binary translation of your application’s machine code as it executes, which allows it to capture all sources of non-determinism such as system calls, signals, thread switches and reads from shared memory or device maps.
As your program runs, Live Recorder stores snapshots of the program address space. These are complete copies of the current state of the program, but since they’re created using the Linux copy-on-write mechanism the impact on your system memory usage is kept to a minimum.
Results of each non-deterministic operation are recorded in an event log stored in the memory of your application process. These non-deterministic operations usually represent a tiny fraction of the instructions executed so the event log is smaller than you might expect. Configure it as a circular buffer, capturing only the most recent history leading up to the bug.
Live Recorder can be linked to your application or used as a standalone executable in order to generate recordings. Linking the Live Recorder API allows for fine grained recording of specific code execution or time segments of your program, whereas the executable allows for a more simple recording approach that suits a more general use case.