2016-04-06 8 views
0

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?

Antwort

0

Ich habe diesen Code geschrieben, aber ich verstehe nicht, was Sie in Ihrem Code zu tun versuchen. Die referenzierten Github-Gisten beziehen sich auf die Antwort auf this SO question, so dass es Ihnen helfen kann, diese Frage noch einmal zu lesen.

Es gibt mehrere Schritte beteiligt sind, und die Klassen müssen in einer bestimmten Art und Weise verpackt werden, aber die Grundlagen sind:

  1. die AgentInstaller Verwenden Sie das Instrumentierungsagenten in einen laufenden JVM zu installieren.
  2. Verbinden Sie sich über JMX mit der JVM.
  3. Rufen Sie die MBean-Operation transformClass(String className, String methodName, String methodSignature) auf, um die Klasse mit dem Demo-Transformator zu instrumentieren.
+0

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

+0

@GEmyy; Jep. Das ist die Idee. Installieren Sie den Agenten in der Zielanwendung und instrumentieren Sie ihn anschließend. – Nicholas

+0

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