プログラムがどこで クラッシュするかをつきとめるには、プログラムがクラッシュしたときのメモリーイメージであるコアファイルを調べるとよいでしょう。where コマンドを使用すれば (「where コマンド」を参照)、コアをダンプしたときのプログラムの実行場所がわかります。
ネイティブコードのときと異なり、コアファイルから Java アプリケーションの状態情報を入手することはできません。
$ dbx program_name core |
または
$ dbx - core |
次の例では、プログラムがセグメント例外でクラッシュし、コアダンプが作成されています。ユーザーは dbx を起動し、コアファイルを読み込みます。次に、where コマンドを使用してスタックトレースを表示させます。 これによって、ファイル foo.c の 9 行目でクラッシュが発生したことがわかります。
% dbx a.out core a.out の読み込み中 core ファイルハンドラの読み込みに成功しました ld.so.1 の読み込み中 libw.so.1 の読み込み中 libdl.so.1 の読み込み中 libc_psr.so.1 の読み込み中 プログラムはシグナル SEGV (フォルトのアドレスにマッピングしていません) 現関数: main 9 printf("string '%s' is %d characters long\n", msg, strlen(msg)); (dbx) where [1] strlen(0x0, 0x0, 0xff337d24, 0x7efefeff, 0x81010100, 0xff0000)、アドレス 0xff2b6dec =>[2] main(argc = 1, argv = 0xffbef39c)、"foo.c" の 9 行目 (dbx) |
コアファイルのデバッグの詳細については、「既存のコアファイルのデバッグ」を参照してください。呼び出しスタックの詳しい使い方については、「呼び出しスタックを確認する」を参照してください。
プログラムが共有ライブラリと動的にリンクされている場合、できれば、コアファイルが作成されたオペレーティング環境でコアファイルをデバッグしてください。別のオペレーティング環境で作成されたコアファイルをデバッグする方法については、「一致しないコアファイルのデバッグ」を参照してください。