URDB is a universal reversible debugger that can add reversibility to almost any debugger through a python-based wrapper. URDB is still experimental. It currently has four personality modules, which support: gdb; MATLAB; python (pdb); and perl (perl -d). URDB gains its reversibility through the use of DMTCP (Distributed MultiThreaded CheckPointing), a fast checkpoint-restart package.
URDB also supports reverse expression watchpoints for general expressions that might change non-monotonically. This is a form of temporal search within a process lifetime. For example, consider a user debugging with gdb and URDB. Suppose the current value of a user-specified expression is incorrect, indicating a bug. A user debugging with gdb would then ask URDB to go back to a point in time to when: (a) the expression had a correct value, and (b) the next statement would cause the expression to take on an incorrect value. This is implemented using binary search: if n statements have been executed, URDB can then find the required point in time using only log2n probes in time, evaluating the expression at each of the log2n. Note that for n as large as 1015 statements, log2n is only about 50.
For further information, see the URDB Sourceforge project page.
To obtain the most recent (possibly unstable) source from subversion,
run the following command:
svn co https://urdb.svn.sourceforge.net/svnroot/urdb/trunk urdb