2015-08-17 7 views
0

Я хочу использовать javaagent и javassist для времени выполнения метода intercepter, однако метод перехвата метода прерывается без ошибок.My javaagent abort и ошибка не найдена

Агент:

import java.lang.instrument.Instrumentation; 

public class Agent { 
public static void premain(String agentArgs, Instrumentation inst) { 
     System.out.println("in Agent#premain"); 
     inst.addTransformer(new TimingTransformer()); 
}} 

Трансформатор

public class JassistTiming { 
public static byte[] addTiming(String clazz, String mname) throws NotFoundException, CannotCompileException, 
     IOException { 
    System.out.println("addTiming, clazz: " + clazz); 
    CtClass clas = ClassPool.getDefault().get(clazz); 
    System.out.println("after get clas: " + clas); 
    CtMethod mold = clas.getDeclaredMethod(mname); 

    String nname = mname + "$impl"; 
    mold.setName(nname); 
    CtMethod mnew = CtNewMethod.copy(mold, mname, clas, null); 

    String type = mold.getReturnType().getName(); 
    StringBuffer body = new StringBuffer(); 
    body.append("{\nlong start = System.currentTimeMillis();\n"); 
    if (!"void".equals(type)) { 
     body.append(type + " result = "); 
    } 
    body.append(nname + "($$);\n"); 

    body.append("System.out.println(\"Call to method " + mname 
      + " took \" +\n (System.currentTimeMillis()-start) + " + "\" ms.\");\n"); 
    if (!"void".equals(type)) { 
     body.append("return result;\n"); 
    } 
    body.append("}"); 

    mnew.setBody(body.toString()); 
    clas.addMethod(mnew); 
    return clas.toBytecode(); 
} 
} 

App.java

class TimeConsume { 
public void doSomething(Integer param) { 
    try { 
     System.out.println("in doSomething..."); 
     Thread.sleep(param * 1000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
public class App { 
public static void main(String[] args) throws Exception 
{ 
    TimeConsume tc = new TimeConsume(); 
    tc.doSomething(3); 
}} 

Выход:

in Agent#premain 
in TimingTransformer 
addTiming, clazz: demo.design.pattern.TimeConsume 
in doSomething... 

«после get clas» не печатает и не имеет ошибки

ответ

0

Это проблема с classpath, я указал путь к классам, теперь это

 Смежные вопросы

  • Нет связанных вопросов^_^