2016-07-14 10 views
0

Ich arbeite an javassist. Ich muss eine Methode bearbeiten. Alles funktioniert gut im Debug-Modus, aber wenn ich es ausgeführt habe, ist es nicht möglich, den aktualisierten Bytecode zu übernehmen. Ich habe keine Ahnung. Hier ist mein CodeJavassist arbeitet im Debug-Modus nicht im Lauf

CtClass classA = classPool.get("com.ClassA"); 
CtMethod sayHiMethod = classA.getDeclaredMethod("sayHi"); 
System.out.println("Going to pront"); 
sayHiMethod.insertBefore("{ System.out.println(\"popload\");}"); 
classA.writeFile(); 

Class c = classLoader.loadClass("com.ClassA"); 
Method m = c.getDeclaredMethod("sayHi"); 
Object obj = m.invoke(c); 

Antwort

0

Ich gehe davon aus, dass, wenn im Debug-Modus ausgeführt wird, die Klasse geladen wird, bevor Javassist eine Chance Instrument Ihre Klasse hat. Wenn die Klasse bereits geladen ist, werden Sie den ursprünglichen Code beobachten.

Ein alternativer Ansatz, um Ihre Klasse neu zu definieren, die dafür nicht anfällig ist, wäre using a Java agent für die Instrumentierung Ihres Codes.

+0

Ja, es ist eine gute Idee, aber ich kann keinen Agenten einschließen. Es ist nicht akzeptabel. –