FreeBSD ハンドブック : カーネルデバッグ : 突然ダンプした場合の解析
Previous: kgdbによるカーネルのクラッシュダンプのデバッグ
Next: DDBを使ったオンラインカーネルデバッグ

20.2. 突然ダンプした場合の解析

カーネルが予想もしない時にコアダンプして config -g を行ってコンパイルされていなかった場合にはどうしたらよいでしょう. すべてが失われるわけではありません. パニックを起こさないでください.

もちろん, クラッシュダンプを使えるようにする必要があります. 使い方は前述の部分を見てください.

カーネルのコンパイルディレクトリで, (Makefileの) COPTFLAGS?=-Oとある行を編集します. -gオプショ ンをここに加えます(オプティマイズオプションのレベルは 変更しな いでください ). もし大まかにコードのどこで問題が起きているか (例 えば, 上の例では pcvtドライバ) わかっているのでしたら, その部 分のコードについてのすべてのオブジェクトファイルを消してください. カーネ ルを再構築しましょう. Makefileのタイムスタンプの変更により, 例えば trap.o などのいくつかの他のオブジェクトファイルも作り直さ れます. 少しの幸運があれば, -gオプションが追加されても作ら れるコードは変更されず, いくらかのデバッグシンボル以外には問題を 起こしたコードとそっくりな新しいカーネルを手に入れることができます. 少なくとも sizeコマンドで古い方と新しい方のサイズを比較すべ きです. これが食い違っていれば, 多分あきらめなければならないでしょう.

ダンプを使って前述のように動かして調べます. デバッグシンボルは 必ずしも十分ではありません. 上の例ではスタックトレースでいくつかの関 数の行番号や引数リストが表示されないかもしれません. もしより多くのデ バッグシンボルが必要であれば,十分になるまで適切なオブジェクトファイ ルを消して (makeして) kgdbセッションを繰り返してください.

これは必ずしもうまく動くと保証はできません. しかしほとんどの場合でう まくいくでしょう.


FreeBSD ハンドブック : カーネルデバッグ : 突然ダンプした場合の解析
Previous: kgdbによるカーネルのクラッシュダンプのデバッグ
Next: DDBを使ったオンラインカーネルデバッグ
FreeBSD Home Page
www@freebsd.org
Updated May 23, 1997