すべての致命的エラー・ログ・ファイルの先頭にあるヘッダー・セクションには、問題の簡易説明が含まれます。このヘッダーは、標準出力にも出力されるほか、アプリケーションの出力ログに現れる可能性もあります。
ヘッダーにはHotSpot仮想マシン・エラー報告ページへのリンクが含まれていますが、そのページではユーザーがバグ・レポートを提出できます。
例A-1 クラッシュからのサンプル・ヘッダー
# # An unexpected error has been detected by Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x417789d7, pid=21139, tid=1024 # # Java VM: Java HotSpot(TM) Client VM (1.6.0-rc-b63 mixed mode, sharing) # Problematic frame: # C [libNativeSEGV.so+0x9d7] # # If you would like to submit a bug report, please visit: # http://bugreport.java.com/bugreport/crash.jsp #
例A-1は、予期しないシグナルでVMがクラッシュしたことを示しています。
例A-2に示すように、次の行には、シグナルのタイプ、シグナルの原因となったプログラム・カウンタ(pc)、プロセスID、およびスレッドIDが記述されています。
例A-2 ヘッダー形式の2行目
# SIGSEGV (0xb) at pc=0x417789d7, pid=21139, tid=1024 | | | | +--- thread id | | | +------------- process id | | +--------------------------- program counter | | (instruction pointer) | +--------------------------------------- signal number +---------------------------------------------- signal name
例A-3に示すように、次の行には、VMのバージョン(Client VMまたはServer VM)、アプリケーションが混合モード、インタプリタ・モードのどちらで実行されたかを示す情報、およびクラス・ファイル共有が有効かどうかを示す情報が含まれます。
例A-4に示すように、その次の情報は、クラッシュの原因となった関数フレームです。
例A-4 ヘッダー形式の4行目
# Problematic frame: # C [libNativeSEGV.so+0x9d7] | +-- Same as pc, but represented as library name and offset. | For position-independent libraries (JVM and most shared | libraries), it is possible to inspect the instructions | that caused the crash without a debugger or core file | by using a disassembler to dump instructions near the | offset. +----------------- Frame type
この例のフレーム・タイプ「C」は、ネイティブCフレームを示しています。表A-1は、可能なフレーム・タイプを示しています。
表A-1 フレーム・タイプ
フレーム・タイプ | 説明 |
---|---|
C |
ネイティブCフレーム |
j |
インタープリタJavaフレーム |
V |
VMフレーム |
v |
VM生成のスタブ・フレーム |
J |
その他のフレーム・タイプ(コンパイル済みJavaフレームなど) |
内部エラーが発生した場合も、VMエラー・ハンドラによって似たようなエラー・ダンプが生成されます。ただし、ヘッダー形式が異なります。内部エラーの例としては、guarantee()
の失敗、アサーションの失敗、ShouldNotReachHere()
などが挙げられます。例A-5は、内部エラーのヘッダー形式を示しています。
例A-5 内部エラーのヘッダー形式
# # An unexpected error has been detected by HotSpot Virtual Machine: # # Internal Error (4F533F4C494E55583F491418160E43505000F5), pid=10226, tid=16384 # # Java VM: Java HotSpot(TM) Client VM (1.6.0-rc-b63 mixed mode)
上のヘッダーにはシグナル名やシグナル番号がありません。2行目にはかわりに、Internal Error
と長い16進文字列が含まれるようになっています。この16進文字列は、エラーが検出されたソース・モジュールと行番号をエンコードしたものです。この「エラー文字列」は一般に、HotSpot仮想マシンを操作するエンジニアにしか役に立ちません。
エラー文字列は行番号をエンコードしているため、コード変更やリリースのたびに変わります。あるリリース(1.6.0など)の特定のエラー文字列を含むクラッシュは、(文字列が一致する場合でも)更新リリース(1.6.0_01など)の同じクラッシュに対応しない可能性があります。
注: 特定のエラー文字列に関連する1つの状況で機能した回避方法や解決方法は、その同じエラー文字列に関連する別の状況でも機能すると考えないでください。次の事実に注意してください。
したがって、バグのトラブルシューティングを行う際に、エラー文字列を唯一の基準として使用すべきではありません。 |