使用ByteBuddy获取执行路径

时间:2017-07-27 13:31:45

标签: java instrumentation agent intercept byte-buddy

我试图获取应用程序的执行路径。要与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");
    }
}

1 个答案:

答案 0 :(得分:0)

我假设你的类不能调用package-private方法。因此Byte Buddy拒绝使用仪器。如果您向代理构建器安装侦听器,则可以拦截此错误。

您可能还想在打印后调用原始代码。您可以添加andThen SuperMethodCall来执行此操作。