バイトコードVerifyErrors
のデバッグが難しいことで有名です。JVMはフィードバックをほとんど提供せず、通常は現在のクラスのみ、場合によってはメソッドのみを提供します。
ASMまたはJasminを介してバイトコードを手動でエンジニアリングするときに通常発生するエラーの例:
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
-出力のような- 行番号(またはオペコードバイトオフセット)への参照
- 各行のオペランドスタック情報(タイプ/深さ)
- より説明的なエラーメッセージ