Самоанализ стека JVM - PullRequest
       7

Самоанализ стека JVM

4 голосов
/ 16 сентября 2011

Есть ли способ программно проверить содержимое стека (как с точки зрения значений, так и типа значений и текущей точки инструкции) на JVM (даже если это зависит от поставщика)?

Например, я хотел бы проверить текущий фрейм активации и извлечь имя метода, которому он принадлежит, а также переменные стека.Кроме того, я хотел бы иметь возможность перебирать кадры активации таким образом.

Возможно ли это?На первый взгляд, JVMTI , кажется, позволяет это, но он предназначен для использования в качестве собственного интерфейса. использовался для реализации библиотеки Java, которая может делать эти вещи, по-видимому, - но это, кажется, немного устарело.Мне было интересно, есть ли решение, интегрированное в API JVM, или какая-то другая кроссплатформенная библиотека JVM, которая позволяет это.

Ответы [ 4 ]

3 голосов
/ 16 сентября 2011

Самое близкое, что я нашел, это Javaflow , который сохраняет стек с локальными переменными как объект. Вы также можете использовать его для восстановления стека в сохраненном состоянии.

2 голосов
/ 16 сентября 2011

Я считаю, Архитектура отладчика платформы Java (JPDA) - это то, что вы ищете.

1 голос
/ 16 сентября 2011

Проверьте эту страницу: http://download.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/tools.html

У них есть утилита jstack:

Эта утилита может получать информацию о Java и собственном стеке из процесса Java. В ОС Solaris и Linux утилита может получать информацию также из файла ядра или с удаленного сервера отладки. См. 2.11 jstack Utility.

Я никогда не использовал его, но я использовал инструмент Visual VM, который поставляется с jdk.

НТН, Джеймс

1 голос
/ 16 сентября 2011

Что не так с Thread.currentThread().getStackTrace()? как указано здесь: комментарий переполнения стека

...