Получение локальных переменных из стекового фрейма в JVM - PullRequest
9 голосов
/ 31 августа 2009

Есть ли способ получить карту или другую структуру данных локальных переменных в текущей области в JVM без использования отладчика? То есть получить локальные кадры текущего фрейма стека?

Я знаю, что существуют объекты трассировки стека, но StackTraceElement не может получить доступ ни к какому состоянию. Он просто говорит вам, какой метод был вызван где, а не то, что было в нем.

Ответы [ 2 ]

4 голосов
/ 31 августа 2009

Имена переменных могут быть включены в файлы классов для помощи отладчикам, но javac по умолчанию этого не делает. Требуется опция -g:vars.

Если он присутствует, программа может использовать библиотеку инженерных данных, такую ​​как ASM , для доступа к именам и области локальных переменных.

Хотя этот вопрос сформулирован плохо, я думаю, что он является дубликатом, и его ответы могут иметь отношение к вашей проблеме. Я бы добавил, что если вас не волнуют имена, тип и область локальной переменной всегда включаются в таблицу атрибутов каждого метода.

1 голос
/ 31 августа 2009

Я не думаю, что есть способ сделать это. Компилятор всегда может оптимизировать локальные переменные, и предоставление такого метода не позволит компилятору воспользоваться преимуществами этого типа оптимизации. При компиляции метода компилятор не сможет определить, вызвали ли вы гипотетический getLocalVariables() где-то еще в программе, поэтому он всегда должен помещать все объявленные локальные переменные в такую ​​карту.

...