FreeBSDカーネルデバッグ

FreeBSDカーネルデバッグがしたいのにダンプが取れないと悩んでいたら,dumpdevを設定するのを忘れていました.次またミスしないように,メモ.

クラッシュダンプを吐くデバイスの設定

/etc/rc.confにdumpdev="/dev/ad0s2b"(/etc/fstabに記述されているスワップバイス)を追加する.また, あらかじめ/var/crashディレクトリを作成しておく.尚,スワップバイスは,搭載メモリ以上の容量が確保されている必要がある.確保されていない場合は,カーネルコンフィグファイル(/usr/src/sys/i386/conf/<CONFIG>)に,MAXMEM=(X*1024)のように設定し,メモリ容量を制限する(<CONFIG>には特定の名前が入る.GENERICとか).

カーネルの再構築

config -g <CONFIG>
あとは普通の要領でカーネル再構築

cd ../../compile/
make depend
make
make install

make install時にはobjcopyによってデバッグ情報の無いカーネルが自動的にインストールされる.

デバッグ操作

以下のコマンドでカーネルデバッガを起動する.

gdb -k /usr/src/sys/compile//kernel.debug /var/crash/vmcore.X

vmcore.Xの"X"の部分には数字が入る.