FreeBSD QandA 180

FreeBSD QandA

Q. カーネルが panic する場所を特定したいのですが、
   デバッグ用シンボルテーブルを含んだカーネルはどうやったら
   作れるのですか?

A. config(8) コマンドに -g オプションをつけて
     # config -g MYKERNEL
   とするか、カーネルコンフィギュレーションファイルに
      makeoptions     DEBUG=-g    #Build kernel with gdb(1) debug symbols
   などという行を付け加え、config(8) コマンドを実行します。

   あとは普通に make すればいいのですが、このように作成された
   カーネルはデバッグ用の情報を含むためサイズが大きなものとなります。
   たとえば 4.3-RELEASE の場合、通常 2 MB 強のカーネルが
   9 MB 弱程度にまで大きくなるので、ルートファイルシステムの
   残り容量に気をつける必要があります。strip(1) したカーネルを
   インストールしましょう。

   [4.0-RELEASE 以降]
   普通にカーネルの再構築の要領で make すれば、デバッグ用のカーネル
   kernl.debug が作成され、make install の際には objcopy(1) で
   デバッグ情報の取り除かれたカーネルが自動的にインストールされます。

   [3.x-RELEASE 系列まで]
   次のようにして、デバッグ情報を含んだカーネルのバックアップを作成し、
   デバッグ情報を取り去ったものをインストールします。
     # cp kernel kernel.debug
     # strip -x kernel
     # make install

   kernel デバッグの時は、次の例のように kernel.debug の方を指定します。
     # cd /usr/src/sys/compile/MYKERNEL
     # gdb -k ./kernel.debug /var/crash/vmcore.0     

   デバッグの際には次のページが参考になるでしょう。
   <URL:http://www.nendai.nagoya-u.ac.jp/~kato/FreeBSD/debug/index.html>

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。