获取ByteBuddy的执行路径
问题描述:
我试图获取应用程序的执行路径。为了与ByteBuddy保持联系,我使用下面的代码实现了一个代理,但它不打印任何东西。谁能帮我?获取ByteBuddy的执行路径
public static void premain(String arg, Instrumentation inst) throws Exception {
new AgentBuilder.Default()
.type(ElementMatchers.nameContains("Application"))
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule) {
return builder.method(ElementMatchers.any()).intercept(MethodDelegation.to(LogInterceptor.class));
}
})
.installOn(inst);
}
public static class LogInterceptor {
static void log(@Origin Method method) {
System.out.println(method.toString() + " was called");
}
}
答
我假设你的类不能调用package-private方法。因此,Byte Buddy拒绝了该仪器。如果您向代理构建器安装侦听器,则可以截获此错误。
您可能还想在打印后调用原始代码。您可以使用SuperMethodCall
添加andThen
来执行此操作。