Получение локальных переменных из фрейма стека в JVM

StackOverflow https://stackoverflow.com/questions/1359044

Вопрос

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

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

Это было полезно?

Решение

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

Если он присутствует, программа может использовать библиотеку разработки байт-кода, например КАК М для доступа к именам и области локальных переменных.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top