假设我想用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
的输出?如果没有,您会考虑什么方法来过滤掉我不关心的东西? 最佳答案
您可以通过将ClassReader.SKIP_DEBUG标志传递给ClassReader.accept()方法来摆脱行号和局部变量信息。
一种替代方法是在TraceClassVisitor和TraceMethodVisitor之前添加一个访问者,该访问者将吞噬您不想在输出中看到的事件。