2012-04-02 49 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