2

入力クラスの静的メソッドのすべての行の前に出力 (println) したいだけです。BCEL を使用してインストルメンテーションを試みましたが、別の形式のエラーが発生しました。それは言う

Exception in thread "main" java.lang.VerifyError: StackMapTable error: bad offset in method C.max(Ljava/lang/String;II)I

命令に静的メソッド呼び出しを配置すると、機能し始める場合とそうでない場合があります。どんな助けでも本当にありがたいです...

更新:修正しました。これは BCEL ライブラリに関するものではなく、計測されたクラスを検証していない JDK バージョン (1.7) でした。そのため、誰かがそのような問題に遭遇した場合は、JDK 1.6 を使用するか、JVM オプション "-XX:-UseSplitVerifier" を使用してください。

乾杯

4

2 に答える 2

1

これStackMapTableは 50.0 で導入され、51.0 で必須になった機能で、コードのさまざまなポイントに型に関するメタデータを含めることでクラスファイルの検証を高速化することを目的としています。残念ながら、手動で記述または調整するのは面倒なので、自動的に生成するツールを使用していない限り、完全に削除することをお勧めします。

StackMapTable を省略するには、クラスをバージョン 50.0 以前に変更する必要があります。invokedynamicしかし、51.0 で追加された機能はとその関係のみであるため、これは実際の問題ではありません。これらはコンパイル済みの Java では使用されません。

于 2013-03-20T17:09:28.377 に答える
0

現在、BCEL を使用して同様の問題が発生しており、JVM -XX:-UseSplitVerifier arg がJava 8で使用できなくなったことに注意したいだけです。

于 2015-10-07T06:41:28.930 に答える