2

パラメータとしてlongを受け取るメソッドA.passLong(Long)があります。クラスBをインストルメントし、そのメソッドの呼び出しを追加して、長い定数を渡します。

呼び出されたメソッドA.passLong(Long)をデバッグすると、パラメーターとして渡した数値ではない数値をメソッドが受け取ることがわかります。

「javap-verbose」を使用して、インストルメントされたコードでクラスのダンプを逆コンパイルしました。定数プールから読み取られた数値(デバッガーで表示される数値)は、期待される数値と次の数値を連結したもののようです。定数プールで。

デバッグ時に再現され、JITが無効になっているため、JITの問題ではありません。

何か案は?

4

1 に答える 1

2

これは、SunJava1.5_04の既知の問題のようです。その後、再定義されている間、クラスのリフレクション(および定数プール)を保護するためのコードを追加しました。リリースノートを参照してください。私はSunの1.5_12がうまく機能することを知っています。

では、どのJVMを使用していますか?

于 2013-03-10T09:23:18.367 に答える