最適なデバッグのための 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>
または同様の役に立たない名前として (開発環境により異なる) 表示されるだけです。