Bill Lewis' Omniscient debugger is in essence very close to what TOD aims to be, and has been a great source of inspiration. Here is an excerpt of OD's page that summarises well what it is about:
(…)
The debugger works by collecting “time stamps” which record everything that happens in a program. A GUI then allows you to navigate backwards in time to look at objects, variables, method calls, etc.
This means that you can see which values are bad, then find where those values came from, who set them and why. This also means that there are no non-deterministic problems. You don't have to guess where the problems might be, you don't have to set breakpoints, you don't have to wonder which threads ran when, you don't ever have to repeat a program run. This is the debugger that you always dreamed about, but never thought was possible.
So what it does is that it first instruments all the classes of the debugged program so that each interesting event is logged (variable assignment, method call, etc.). When the program runs, a complete trace of events is recorded.
The debugger then analyses the trace and lets the programmer drive the virtual (because actual execution already occurred) execution in a way that is infinitely richer than with traditional debuggers' controlled execution:
Additionally it permits to
Although the Omniscient Debugger provides an unprecedented ease of navigation in a program's control flow, it doesn't differentiate from traditional debuggers when it comes to memory inspection: it is still a hierarchical view of the objects, with no ability to customize views. So it shares the same issues as traditional debuggers with this respect.