我有一个依赖于BCEL库的工作分析器,但由于JDK1.7或更高版本不再支持后者,我试图使用ASM库进行复制。有没有办法使用MethodVisitor类访问方法的每个指令? 我找到了使用ClassNode,MethodNode和InsnList的方法,但我很想知道它是否可以使用Visitor框架实现。以下代码显示了我想要做的事情
// main function
InputStream in = new FileInputStream("path_to_classfile.class");
ClassReader reader = new ClassReader(in);
ClassNode classNode = new ClassNode();
reader.accept(classNode,0);
List<MethodNode> methods = classNode.methods;
for(MethodNode m: methods){
System.out.println("Method name: " + m.name);
InsnList m_instructionList= m.instructions;
for (int m_i = 0; m_i < m_instructionList.size(); m_i++){
AbstractInsnNode instruction = m_instructionList.get(m_i);
if(instruction.getOpcode() == Opcodes.ISTORE){
// insert bytecode to call a profiler method
}else if(instruction.getOpcode() == Opcodes.FSTORE){
// insert call to a a profiler method
}
else if...
}
}
// Write to a .class file
谢谢!