Как получить доступ к переменной инструментированного метода с помощью javaagent?

Я пытался получить значения из инструментального метода. Использование $1, $0 для получения значений параметров и текущих переменных объекта работает нормально. Но теперь я хотел бы взять значение из объекта, используемого в методе.

В качестве примера предположим, что я инструментирую org.h2.jdbc.JdbcPreparedStatement. Я хочу получить URL-адрес подключения, используя переменную conn, используемую в строке 112 в теле метода. (Класс JdbcConnection содержит URL-адрес в качестве атрибута) Но когда я использую as,

conn.getURL()

он выдает CannotCompileException, говоря, что нет класса с именем conn.

Как я могу получить этот URL? Возможно ли что-то с javassist или я что-то не так делаю?


person udani    schedule 12.01.2016    source источник


Ответы (1)


Согласно учебнику по Java, $0 относится к this ($1 и далее являются параметрами), поэтому вы можете использовать

$0.conn.getURL()

or

$0.getConnection().getURL()

для доступа к соединению.

person prunge    schedule 13.01.2016