I was discussing Omniscient Debuggers recently with someone at an LJC meetup.
Omniscient debuggers drastically reduce the time needed to debug software by giving the programmer complete freedom with respect to time: they permit to step forward and backward, and to immediately answer questions like “when was this variable assigned that value?”. This is made possible by the recording of the activity of the debugged program, so that its history, or execution trace, can be freely navigated.
There appear to be two around for Java:
Of course, they have their own scalability and performance issues:
Omniscient debuggers have been around for several years, however they have not made it into the mainstream. Indeed they suffer from inherent scalability problems: execution traces are usually huge, and capturing, storing and presenting them to the programmer is challenging.
by Matthew Painter, CTO