axel22
axel22

Reputation: 32335

JVM stack introspection

Is there a way to inspect the contents of the stack (both in terms of the values and the type of the values, and the current instruction point) programmatically on the JVM (even if it's vendor-specific)?

For example, I would like to inspect the current activation frame and extract the method name it belongs to, as well as stack variables. Furthermore, I would like to be able to iterate activation frames in this way.

Is this possible? At a first glance, the JVMTI seems to allow this, but its meant to be used as a native interface. It has been used to implement a Java library that can do these things, apparently - but this seems to be a bit dated. I was wondering if there is a solution integrated into the JVM api, or some other cross-platform JVM library that allows this.

Upvotes: 4

Views: 1592

Answers (4)

James-Jesse Drinkard
James-Jesse Drinkard

Reputation: 15703

Check out this page: http://download.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/tools.html

They have a jstack utility listed:

This utility can obtain Java and native stack information from a Java process. On Solaris OS and Linux the utility can get the information also from a core file or a remote debug server. See 2.11 jstack Utility.

I've never used it, but I have used the Visual VM tool that comes with the jdk.

HTH, James

Upvotes: 1

Steve McLeod
Steve McLeod

Reputation: 52448

I believe Java Platform Debugger Architecture (JPDA) is what you are looking for.

Upvotes: 2

Angel O'Sphere
Angel O'Sphere

Reputation: 2666

What is wrong with Thread.currentThread().getStackTrace() ? as poiinted out here: stack overflow comment

Upvotes: 1

Peter Lawrey
Peter Lawrey

Reputation: 533492

The closest I have found is Javaflow which saves the stack with local variables as an Object. You can also use it to restore the stack to a saved state.

Upvotes: 3

Related Questions