2017-07-27 16 views
0

アプリケーションの実行パスを取得しようとしています。 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"); 
    } 
} 

答えて

0

あなたのクラスがpackage-privateメソッドを呼び出せないと仮定します。したがって、バイト・バディは計測を拒否します。エージェントビルダにリスナーをインストールすると、このエラーを代行受信できます。

また、印刷後に元のコードを呼び出すこともできます。あなたはSuperMethodCallandThenを追加することができます。

関連する問題