次のようにコンパイルすると、このデバッグ情報が .class ファイルに含まれることがわかります。
javac -g Main.java
LineNumberTable:
次のセクションから手動で確認できます。
javap -c -constants -private -verbose '$<' > '$@'
私が欲しいのはjavap
、バイトコードの途中でソースを表示することです。
サンプル入力:
public class New {
public static void main(String[] args) {
System.out.println(new Integer(1));
}
}
実際のjavap
出力:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #3 // class java/lang/Integer
6: dup
7: iconst_1
8: invokespecial #4 // Method java/lang/Integer."<init>":(I)V
11: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
14: return
LineNumberTable:
line 3: 0
line 4: 14
望ましい javap 出力:
System.out.println(new Integer(1));
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #3 // class java/lang/Integer
6: dup
7: iconst_1
8: invokespecial #4 // Method java/lang/Integer."<init>":(I)V
11: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
}
14: return
LineNumberTable:
line 3: 0
line 4: 14
これにより、出力の解釈がはるかに簡単になりjavap
ます。
似ていますが、より一般的な質問: javap を使用して、Java コードの行に対応するバイトコードの行を確認する方法は?
私はしようとしました:
- http://bugreport.java.com/submit_intro.doで機能リクエストを作成します。
- メーリング リストに電子メールを送信します。
jdk9-dev@openjdk.java.net
しかし、返信はなく、私のメッセージはそれらの Web サイトにも表示されません。あまりオープンなプロジェクトではありません。