I was wondering if something exists (in Java world) able to take an snapshot of the JVM current state with the following features:
- Do it while an exception is being thrown.
- Capture local variables, method's arguments, etc.
- Put it in a handy file which can be used to extract or reproduce in a IDE the situation in your source code.
The two first features are required (third would be awesome). And it must be suitable for production use (so, there is no way about debuggers).
Before asking this I've searched through the WWW (as long as possible) and I found some pointers:
- Cajoon Interceptor: As said in Dzone post, it's a passive JVM agent which fulfill the three requirements! But, it has two downsides: you must pay for it and the site is down (maybe there is no chance to pay anything).
- AviCode Intercept Studio: Cajoon's .NET equivalent. Just to give some insight about.
- JavaFrame: Ok, it's a tweet, but it points to a available SVN repo which have the source code (under MIT license) of a JVM agent which looks fine (I'm going to give a try to it).
So, maybe I'm looking for a non existent solution? It's not urgent, but I had this idea for a project and it would be great to explore this "unknown" (?) path and get something real.
It seems to be clear that it would be a JVM agent (exception event from JVMTI, for example).
At last, I would highlight the followin paragraph from Wikipedia's Exception Handling article:
In runtime engine environments such as Java or .NET, there exist tools that attach to the runtime engine and every time that an exception of interest occurs, they record debugging information that existed in memory at the time the exception was thrown (call stack and heap values). These tools are called Automated Exception Handling or Error Interception tools and provide 'root-cause' information for exceptions.
That's the idea. I hope somebody can give me some insight or maybe, in the future, somebody get inspired by this humble post :)
Thanks!