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?
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
@GEmyy; Ouaip. C'est l'idée. Installez l'agent dans l'application cible, puis instrumentez-le. – Nicholas
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