如何使用javaagent访问检测方法的变量?

时间:2016-01-12 12:12:43

标签: java jdbc instrumentation javassist javaagents

我一直在尝试从检测方法中获取值。使用$ 1,$ 0来获取参数值和当前对象变量一直运行良好。但是现在我想从方法中使用的对象中获取一个值。

举个例子,假设我正在检测org.h2.jdbc.JdbcPreparedStatement类。我想通过使用方法体中第112行中使用的conn变量来获取连接URL。 (JdbcConnection类包含url作为属性)但是当我使用as时,

conn.getURL()

它抛出CannotCompileException,说没有名为conn的类。

如何获取该网址?是不是有可能使用javassist或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据Javassist Tutorial$0引用this$1以上是参数),因此您可以使用

$0.conn.getURL()

$0.getConnection().getURL()

访问连接。