この機能は FreeBSD 2.2 からサポートされました. これは本当にすばらし い機能です.
GDB はすでにかなり以前より リモートデバッグ をサポートしてい ます. これはシリアル回線を使い非常に単純なプロトコルで行ないます. もちろん, この方法では今までに示した方法とは違い, 2台のマシンが必 要になります. 1台はデバッグ環境のためのホストで, すべてのソースとす べてのシンボルを含んだバイナリのコピーを持っています. もう 1台は ターゲットマシンで, 同一のカーネルのコピー (ただしデバッグ情報は 取り除いてあるもの) を単に実行するためのものです.
この場合, カーネルのコンフィグレーションは config -g で行な い, DDB を含めなくてはなりません. そうして通常通りコンパイルし ます. こうして作ったバイナリファイルはデバッグ情報のために非常に大き くなります. このカーネルをターゲットマシンにコピーして strip -x でデバッグシンボルを取り除きます. そして -d ブートオプションを使いブートします. sio デバイスにフラグ 0x80 が設定されているターゲットマシンの シリアル回線を, デバッグホストのいずれかのシリアル回線に つないでください. それからデバッグ(訳注:ホスト)マシン上で, ターゲットとなって いるカーネルのコンパイルディレクトリで gdb を起動します:
% gdb -k kernel
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
(kgdb) リモートデバッグセッションの初期化 (1番目のシリアルポートを使用する ことの設定) を以下のように行ないます.
(kgdb) target remote /dev/cuaa0
次にターゲットマシン (デバイスのプローブ直前で DDB に入っています) で次のように入力します:
Debugger("Boot flags requested debugger")
Stopped at Debugger+0x35: movb $0, edata+0x51bc
db> gdbDDB は次のような出力を返すでしょう.
Next trap will enter GDB remote protocol mode
gdbと入力するたびに リモート GDB とローカル DDB が交互に切り替わ ります. トラップをすぐに起こすために単に ``s'' (step) と入力して下 さい. そうするとホストの GDB はターゲットのカーネルの制御を行なうよ うになります.
Remote debugging using /dev/cuaa0
Debugger (msg=0xf01b0383 "Boot flags requested debugger")
at ../../i386/i386/db_interface.c:257
(kgdb)このセッションではソースコードへのフルアクセスや Emacs の window 上 の gud-mode (これは別の Emacs window に自動的にソースコードを表示し ます) で動かすなど, 通常の GDB セッションでできることのほとんどのこ とができます.