假设我想用asm库打印方法的字节码。
public int get777() { return 777; }
到TraceClassVisitor
将显示为
// access flags 0x1
public get777()I
L0
LINENUMBER 21 L0
SIPUSH 777
IRETURN
L1
LOCALVARIABLE this Lsomething/Point; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
}
现在,问题是我只关心
SIPUSH 777
IRETURN
其他一切与我无关,所以我想把它们擦掉。
我曾想过通过继承TraceMethodVisitor
来过滤我不想要的东西,但事实证明它实际上是一个最后的类(真可惜!)。
有没有办法格式化TraceClassVisitor
的输出?如果没有,你认为最好的方法是过滤掉我不关心的东西?
答案 0 :(得分:1)
您可以通过将ClassReader.SKIP_DEBUG标志传递给ClassReader.accept()方法来删除行号和局部变量信息。
另一种方法是在TraceClassVisitor和TraceMethodVisitor之前添加一个访问者,它会吞下你不希望在输出中看到的事件。
答案 1 :(得分:1)
我会考虑通过Printer构造函数提供我自己的Textifier(可能会扩展或委托给TraceClassVisitor(ClassVisitor,Printer,PrintWriter))。我没有测试过这种方法。
答案 2 :(得分:0)
我的标准方法:获取源代码,search'nplace final class
- > class
,重新编译。