Java Agents
diego-pacheco.blogspot.com
diego-pacheco.blogspot.com
The C++ API gives you access to, amongst other things: manipulating the stack by reading/writing local variables or forcing early returns with values of your choice, learning what locks a thread holds, walking the heap including unreachable objects, tagging objects, adding field watches, getting the bytecodes of a method, intercepting the entire JNI API, receiving callbacks on dozens of different events including things like field modification, JITC, object allocation and the begin/end of GC.
Very few people really take advantage of this API, even though it can be used to achieve remarkable effects all against public, stable API.
The Java debugger is implemented on top of the JVMTI.
And I know one's not supposed to speculate, but multiple upvotes in short time without any discussion for something of this caliber is a bit off.