我试图获取应用程序的执行路径。要与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");
}
}
答案 0 :(得分:0)
我假设你的类不能调用package-private方法。因此Byte Buddy拒绝使用仪器。如果您向代理构建器安装侦听器,则可以拦截此错误。
您可能还想在打印后调用原始代码。您可以添加andThen
SuperMethodCall
来执行此操作。