最適なデバッグのための Java のコンパイル

コンパイルされた .class ファイルに含まれるデバッグ情報の大きさとタイプは、ビルド・ツールおよび明示的に指定したデバッグ・オプションによって異なります。

以下のデバッグ情報オプション: IBM® Java

これらは IBM® javac コンパイラーに関連するデバッグ・オプションです。

-g:source
コンパイルされたクラス・ファイルに Java ソース・ファイル名が含まれます。
-g:lines
クラス・ファイルに LineNumberTable が含まれます。このテーブルは、各ソース・ファイルの行番号と生成された java バイトコード指示をマップします。マシン・コード・ステートメントは Java 仮想マシンにより使用されます。
-g:vars
クラス・ファイルに各非ネイティブおよび非抽象メソッドに対する LocalVariableTable が含まれます。このテーブルには、各ローカル変数の名前とタイプ、および変数が有効な範囲が含まれています。
重要: Java プログラムのデバッグが必要とする likelihood がある場合、次のオプションを使用して、すべてのデバッグ情報をすべてのコンパイルされた .class ファイルに含めます。
javac -g:source,lines,vars <class files>

このオプションの結果として、例外のために表示されるスタック・トレースに各スタック・エントリーのロケーション情報が含まれます。例:

Exception in thread "main" java.lang.NullPointerException
        at com.example.Book.getTitle(Book.java:16)
        at com.example.Author.getBookTitles(Author.java:25)
        at com.example.Bootstrap.main(Bootstrap.java:14)

デバッグ・オプションが指定されていない、または -g:none オプションが使用されている場合、問題判別用に使用できる情報は少なくなります。

Exception in thread "main" java.lang.NullPointerException
        at com.example.Book.getTitle(Unknown location)
        at com.example.Author.getBookTitles(Unknown location)
        at com.example.Bootstrap.main(Unknown location)

これはスタック・トレースの値を減少させるだけでなく、プログラムのデバッグ時にローカル変数の名前が表示されるのを防ぎます。その代わりに、すべての変数が <local variable> または同様の役に立たない名前として (開発環境により異なる) 表示されるだけです。