Получение локальных переменных с помощью javassist?

1

Есть ли способ получить имена локальных переменных с помощью javassist? Моя конечная цель - получить хэш-код объектов во время выполнения. Например, если у меня есть фрагмент кода, например:

void try(){
Integer a = 123;
System.out.println(a);
}

Я хотел бы измерить его так, чтобы он выглядел примерно так:

void try(){
Integer a = 123;
System.out.println(a.hashCode());
System.out.println(a);
}

Итак, я пытаюсь получить локальное имя переменной "a", а затем инструмент, который возвращается в код. Есть ли у вас имя, а также есть ли лучший способ сделать то же самое?

Благодарю.

Теги:
instrumentation
javassist

1 ответ

0

Имя a локальной переменной является только метаинформацией. Во время выполнения эта информация зависит от индекса. Для нестатического метода локальные переменные будут храниться в массиве, содержащем ссылки:

------------
|  0   | 1 |
------------
| this | a |
------------

Доступ к a выполняется путем выполнения команды ALOAD_1. Что вам нужно сделать, так это разобрать байт-код для такой команды и повторить его, вызвав метод хеш-кода и распечатав его.

  • 0
    Как примечание, вы не можете полагаться на это отображение. Единственное, что исправлено, это то, что this соответствует переменной 0 в начале метода. Компилятор может использовать индекс 1 для a но он также может использовать больший индекс, имея неиспользуемые индексы между this и a (но это довольно необычно), но он также может использовать индекс 0 для a поскольку this не используется в последующем коде…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню