1

假设我想用 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,但它实际上是一个最终类(真糟糕!)。

有什么方法可以格式化 a 的输出TraceClassVisitor吗?如果不是,您认为过滤掉我不关心的东西的最佳方法是什么?

4

3 回答 3

1

您可以通过将 ClassReader.SKIP_DEBUG 标志传递给 ClassReader.accept() 方法来摆脱行号和局部变量信息。

另一种方法是在 TraceClassVisitor 和 TraceMethodVisitor 之前添加一个访问者,这会吞下您不想在输出中看到的事件。

于 2011-11-02T12:30:35.277 回答
1

我会考虑通过TraceClassVisitor(ClassVisitor,Printer,PrintWriter)构造函数提供我自己的打印机(可能扩展或委托给Textifier ) 。我没有测试过这种方法。

于 2011-11-02T12:48:52.233 回答
0

我的标准方法:获取源代码,搜索'n'replace final class-> class,重新编译。

于 2011-11-02T10:09:45.150 回答