2016-04-06 1 views
0

Je suis nouveau dans le monde de l'instrumentation. J'essaye d'instrumenter une JVM distante au Runtime. En fait, je dois vous connecter toutes les classes ou une partie d'entre eux et de les transformer .. J'ai lu beaucoup de documents et j'ai trouvé ce code HEREInstrumentation d'exécution à distance

J'ai changé le code et j'ai remplacé

// Run sayHello in a loop 
Person person = new Person(); 
for(int i = 0; i < 1000; i++) { 
    person.sayHello(i); 
    person.sayHello("" + (i*-1)); 
    Thread.currentThread().join(5000); 
} 

par cette un:

for (int i = 1; i < args.length; i++) { 
    String className = args[i] ; 
    System.out.println("className" + className); 
    // Call transformClass on the transformer MBean 
    server.invoke(on, "transformClass", new Object[]{className}, new String[]{String.class.getName()}); 
} 

Mais je trouve que args.length = 0 Je ne sais pas ce que les args [] contiennent ... Et si elle contient des classes chargées (je suppose) alors pourquoi il est vide ..

Une aide s'il vous plaît?

Répondre

0

J'ai écrit ce code, mais je ne comprends pas ce que vous essayez de faire dans votre code. Les github gists référencés faisaient référence à la réponse à this SO question, donc cela peut vous aider à relire cette question.

Il y a des étapes multiples impliqués, et les classes doivent être emballés d'une manière spécifique, mais les bases sont:

  1. Utilisez le AgentInstaller pour installer l'agent d'instrumentation dans une machine virtuelle Java en cours d'exécution.
  2. Connectez-vous à la JVM via JMX.
  3. Appelez l'opération MBean transformClass(String className, String methodName, String methodSignature) pour instrumenter la classe à l'aide du transformateur de démonstration.
+0

thnx @Nicholas ... il est fait;) Mais je veux vous poser une autre question: votre code sur GitHub, pourrais-je les classes d'instruments sorcière sont locatedin une autre application? – GEmyy

+0

@GEmyy; Ouaip. C'est l'idée. Installez l'agent dans l'application cible, puis instrumentez-le. – Nicholas

+0

thnx @Nicholas, mais comment dois-je installer l'agent dans l'application cible? la classe "AgentInstaller" existe dans mon programme Mais je veux instrumentaliser une autre application .. Dois-je juste changer le PID dans la classe AgentInstaller ou quoi exactement? – GEmyy