During a program run, it collects "time-stamps" for every event happening in the VM (using bytecode instrumentation). This generates a (potentially huge) trace of the program which your can then inspect in a GUI. The UI is quite powerful (although a bit complex).
Along with some polishing of the UI, the only thing it lacks is some kind of language to query the trace: currently you can only use the UI, which can become a bit tedious. It would be nice to have predefined queries to find common mistakes (deadlocks for example; yes, it works with multithreaded programs).
Here is an experimental Java debugger which is able to remember every event happening in a program:
http://www.lambdacs.com/debugger/debugger.html
During a program run, it collects "time-stamps" for every event happening in the VM (using bytecode instrumentation). This generates a (potentially huge) trace of the program which your can then inspect in a GUI. The UI is quite powerful (although a bit complex).
Along with some polishing of the UI, the only thing it lacks is some kind of language to query the trace: currently you can only use the UI, which can become a bit tedious. It would be nice to have predefined queries to find common mistakes (deadlocks for example; yes, it works with multithreaded programs).