假设我想用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之前添加一个访问者,该访问者将吞噬您不想在输出中看到的事件。

10-05 23:38