Ich bin neu in der Instrumentierung Welt. Ich versuche eine entfernte JVM zur Laufzeit zu instrumentieren. Eigentlich habe ich alle Klassen oder einen Teil von ihnen protokollieren und wandeln sie .. Ich habe viele Dokumente gelesen und ich fand diesen Code HERERemote Runtime Instrumentation
ich den Code geändert und ich ersetzt
// 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);
}
durch diese ein:
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()});
}
Aber ich fand, dass args.length = 0 ich weiß nicht, was der args [] enthält ... Und wenn es geladene Klassen enthält (ich gehe davon aus), dann, warum es leer ist ..
Irgendwelche Hilfe bitte?
thnx @Nicholas ... es gemacht;) Aber ich möchte Sie auf eine andere Frage stellen: mit Ihrem Code auf Github, konnte ich Geräteklassen Hexe sind eine andere Anwendung locatedin? – GEmyy
@GEmyy; Jep. Das ist die Idee. Installieren Sie den Agenten in der Zielanwendung und instrumentieren Sie ihn anschließend. – Nicholas
thnx @Nicholas, aber wie sollte ich den Agenten in die Ziel-App installieren? Die "AgentInstaller" -Klasse existiert in meinem Programm. Aber ich möchte eine andere Anwendung instrumentieren. Sollte ich nur die PID in der AgentInstaller-Klasse ändern oder was genau? – GEmyy