2012-04-02 90 views
10

我发现字节码VerifyErrors很难调试。 JVM只提供很少的反馈,通常只是当前类,有时甚至是方法。调试VerifyError的好工具?

我通常手动当通过ASMJasmin工程字节码遇到某些错误的例子:

  • Stack size too large
  • Unable to pop operand off an empty stack
  • Falling off the end of the code
  • Expecting to find object/array on stack
  • Incompatible object argument for function call
  • Inconsistent stack height 4 != 2

(为了清楚;我知道所有的这些的意思,我感兴趣的工具或技术来调试他们的原因)

我的问题:是否有出有任何工具,使这些类型的错误的详细反馈?我将例如欣赏信息,诸如

  • javap样输出
  • 引用在每一行线数(或操作码字节偏移)
  • 操作数堆栈信息(类型/深度)
  • 更描述性错误信息
+1

http://stackoverflow.com/questions/3438404/java-lang-verifyerror它会帮助吗? – Tom 2012-04-02 07:54:21

+0

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatk%2FEX4AA2.htm有帮助吗? – Tom 2012-04-02 08:03:30

回答

2

我写的Kraktau project对调试验证错误非常有用。它能够在发生错误的位置给出字节码偏移量,以及每条指令的堆栈和本地类型信息。它甚至可以正确处理子程序的标志和屏蔽信息。它能够捕捉几乎所有的错误。

还没有打印出验证信息的特定界面,但如果您仍然是我想要的功能类型,我可以添加一个。与此同时,试图用Krakatau反编译你的班级将打印出一条错误消息,其中包含有关验证错误的信息和发生指令的类型信息。

更新:由于性能问题,Krakatau不再执行验证。如果你想要验证,你需要结账提交3724c05ba11ff6913c01ecdfe4fde6a0f246e5db