打印在带有ASM的运行系统中被调用的方法的名称

时间:2019-05-26 03:50:08

标签: java

我需要在运行时被调用的方法名称(如果可能的话)打印到标准输出。在类库中加载它们时,我能够获得它们的类名,但是当涉及到方法时,我还是很困惑。

很多资源在假设您知道函数所在类的名称的情况下对此进行了描述,但是我想解析所有类。

我知道我需要重写访问方法功能,但不确定从哪里开始。

public class LogMethodClassVisitor extends ClassVisitor {
private String className;

public LogMethodClassVisitor(ClassVisitor cv, String pClassName) {
super(Opcodes.ASM5, cv);
className = pClassName;
}

@Override
public MethodVisitor visitMethod (int access, String name, String desc,
    String signature, String[] exceptions) {
        return null;
//put logic in here
}

}

public class ImportantLogClassTransformer implements ClassFileTransformer {
public byte[] transform(ClassLoader loader, String className,
        Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
        byte[] classfileBuffer) throws IllegalClassFormatException {

        ClassReader cr = new ClassReader(classfileBuffer);
        ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
        ClassVisitor cv = (ClassVisitor) new LogMethodClassVisitor(cw, className);
        cr.accept(cv, 0);
        return cw.toByteArray();
    }
}

0 个答案:

没有答案