-XX:[+|-]HitachiLocalsInThrowable(例外発生時のローカル変数情報収集オプション)
形式
- -XX:+HitachiLocalsInThrowable
-
スタックトレース中のメソッドのローカル変数情報を出力します。
ただし,java.lang.StackOverflowError発生時には,このオプションは無視されます。
- -XX:-HitachiLocalsInThrowable
-
スタックトレース中のメソッドのローカル変数情報を出力しません。
説明
java.lang.Throwable.fillInStackTraceメソッド実行時に,スタックトレース中のメソッドのローカル変数情報を収集します。
- デフォルト値
-
-
-XX:-HitachiLocalsInThrowable
-
出力形式
locals: name: <name> type: <type> value: <value> …
出力内容を次に示します。
-
1行目に「locals:」という見出しが出力されます。
-
2行目以降は,収集可能であった各ローカル変数について,次の情報が1行ずつ出力されます。
-
変数名
-
型名(基本型名,クラス名または配列型名)
-
変数値を表現する文字列
-
なお,各ローカル変数の出力内容は,空行で区切られています。
- <name>:
-
ローカル変数名。
メソッドに渡される引数の場合は,変数名に続いて[arg***](***は引数番号)が表示されます。
- <type>:
-
ローカル変数の型名(基本型名,クラス名または配列型名)。
- <value>:
-
ローカル変数の値を表現する文字列。
-
基本型:
値をそのまま文字列化したもの
-
クラスまたは配列型:
変数値がnullの場合:(null)
それ以外の場合:<オブジェクトの存在するアドレス>
値表現の最大文字列長は64です。これを超える場合は64文字目までを出力した後,「...」という文字列が出力されます。クラスまたは配列型の場合,次の追加オプションを指定することでより詳細な表現が追加できます。
-
-XX:+HitachiLocalsSimpleFormat
-
-XX:+HitachiTrueTypeInLocals
-
-XX:HitachiCallToString
-
出力例
Javaプログラム例1を使用した出力例を,次に示します。
すべてのローカル変数情報が出力される場合
at Example1.method(Example1.java:15) locals: name: this type: Example1 value: <0x922f42d0> name: l1 [arg1] type: int value: 1 name: l2 [arg2] type; char value: 'Q' name: l3 [arg3] type: java.lang.Object value: <0xaf112f08> name: l4 type: float value: 4.000000 name: l5 type: boolean value: true name: l6 type: double value: 1.79769E+308 name: l7 type: java.lang.Object[] value: <0x922f42d8> at Example1.main(Example1.java:5) locals: …
ローカル変数情報が存在しない場合
-
-gオプションまたは-g:varsオプションを付加しないでclassファイルを生成した場合
-
-gオプションまたは-g:varsオプションを付加して生成したclassファイルの,nativeメソッドの場合
at Example1.method(Example1.java:15) locals: name: this type: Example1 value: <0x922f42d0> name: [arg1] type: int value: 1 name: [arg2] type; char value: 'Q' name: [arg3] type: java.lang.Object value: <0xaf112f08> at Example1.main(Example1.java:5) locals: …
注意事項
-
ローカル変数情報を完全に収集するためには,javacでclassファイルを生成する際に,-gオプションまたは-g:varsオプションを付加してclassファイル内にローカル変数情報を埋め込んでおく必要があります。-gオプションまたは-g:varsオプションを付加しないで作成されたclassファイルについては,収集可能な範囲でローカル変数情報が出力されます。
-
-gオプションまたは-g:varsオプションを付加して生成されたclassファイルでも,nativeメソッドの場合はローカル変数情報が存在しません。
-
JITコンパイラがメソッドをJITコンパイルする際,最適化の一環として,不要と判断したローカル変数を除去することがあります。
(例)int not_used = 12345といった宣言および初期化以降未使用のローカル変数
この場合,例外発生時点のローカル変数情報には,次の値が出力されます。
型名
出力情報
boolean型
false
char型
'\0'
byte型
short型
int型
long型
float型
double型
0
クラス型
配列型
(null)
-
制御構造が複雑で行数が多いメソッドのローカル変数情報を出力する場合,解析に時間が掛かるため,例外発生時の例外オブジェクト生成処理に時間が掛かることがあります。
-
java.lang.ThreadクラスのgetStackTraceメソッドを使用して取得した,カレントスレッドのスタックトレースにローカル変数情報を出力するためには,例外発生時のスタックトレースにローカル変数情報を出力する,例外発生時のローカル変数情報収集オプション(-XX:+HitachiLocalsInThrowable)が必要になります。