2017-07-27 3 views
0

J'essaie d'obtenir le chemin d'exécution d'une application. Pour entrer en contact avec ByteBuddy j'ai mis en place un agent en utilisant le code ci-dessous mais il n'imprime rien. Quelqu'un peut-il m'aider?Récupère le chemin d'exécution avec 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"); 
    } 
} 

Répondre

0

Je suppose que vos classes ne peuvent pas appeler la méthode package-private. Byte Buddy refuse donc l'instrumentation. Si vous installez un écouteur sur le générateur d'agent, vous pouvez intercepter cette erreur.

Vous souhaitez probablement également appeler le code original après l'impression. Vous pouvez ajouter un andThen avec un SuperMethodCall pour le faire.