--ホーム--
|
kgdbを使った検死FreeBSD(98)の検死を行なう場合,もっとも強力な道具はkgdbです.カーネル がお亡くなりになったときはこれを使ってデバッグするのが極めて有効です. では,その使い方を説明していきます. カーネルの構築通常のカーネルの構築作業でも検死を行なえないことはないのですが,やはり デバッグ用のカーネルを用意した方が幸せです.ソースリストや変数名を知る ことができるのとできないのでは雲泥の差があります.デバッグ用のカーネル の作り方はいたって簡単です. config -g CONFIGFILE と実行することだけです.``-g''が加わっただけですね.こうしてから, cd ../../compile/CONFIGFILE make depend all と実行するとカーネルが作成されます.ところが,作成されたカーネルにはシ ンボルテーブルがどっさり詰め込まれているので,
ということになります.kernelのでかさはすごくて,私のところでは9.7MBに なります.こんなカーネルをインストールしたら洒落にならないわけで,ちょっ としたおまじないを行ないます. cp kernel kernel.debug strip -d kernel make install シンボルテーブルつきのでかいkernelは名前を変えて保存しておき,実際にイ ンストールするカーネルはストリップしておきます. パニック後の処置カーネルの準備ができたら後はパニックするのを待つだけです.運良く(?)パ ニックしてくれたら様子を見てあげましょう.そのうちdumping coreと言って からハードディスクに実メモリの内容を転送していきます.終了するとそのう ちリブートします.さて,リブートしたら今度はカーネルを立ちあげます.こ のとき, Boot: kernel -s
のようにしてシングルユーザモードで起動します.もしpanicが頻繁で使い物
にならないカーネルであれば,kernelの変わりに安定したカーネルの名前を入
れて下さい.(私はいつもkernel.okというのを用意しています.)
fsck -p としてファイルシステムを検査して下さい.そして, mount -a -t ufs としてufsのファイルシステムをマウントします.その後で savecore -N /kernel /var/crash
と実行して下さい.-Nの後はパニックを起こしたカーネルのファイル名です.
savecoreは/var/crashにkernel.0とvmcore.0というファイルを作成します.も
し以前にsavecoreを実行していれば,ピリオドの後の数字は大きくなります.
ここで注意しなければならないのが,vmcoreのサイズです.これは実メモリの
容量と同じ大きさになります.ファイルシステムを溢れさせないように注意し
て下さい.
exit を実行してマルチユーザモードに移行します. kgdbを使うまずログインします.そして,カーネルをコンパイルしたディレクトリに移動 してkgdbを起動します. cd /sys/compile/CONFIGFILE kgdb 次に,シンボルテーブル,コアダンプ,そして実行ファイルをロードします. (kgdb) symbol-file kernel.debug (kgdb) exec-file /var/crash/kernel.0 (kgdb) core-file /var/crash/vmcore.0 これで準備ができました. (kgdb) where を実行するとスタックフレームから後ろにたどった情報が表示されます.kgdb の実態はgdbなので,あとはgdbと同じ要領でデバッグして下さい. 死亡例実際に死亡したカーネルのデバッグ例を示します. |