ただただソース眺めているだけの私に言われたくないだろうが 2.6.26 から kgdb が vanilla にマージされるそーで rc 見ると確かに....驚いた。信念よりも嬉しい人の方が多くなったのかなぁ。十中九点九 私には使いきれない。が、ちょっと jot。
カーネルコンパイルのオプションで
CONFIG_DEBUG_INFO=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
としてコンパイル。VMWare にインストールした後で
/boot/grub/menu.lstにこんな感じで
update-grub# kopt=root=/dev/sda1 ro kgdbwait kgdboc=ttyS0,115200
あっ、その前にありがたく
こちらを参考にしつつシリアルの設定。一点手元の socat では
socat unix-connect:/tmp/vmware-serial-$1-$PORT \
pty:link=/tmp/ttyv$1$PORT,raw,echo=0,waitslave
では NG で
pty,link=...
としなくてはならんかった。その後リブートすると
....
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
00:09 ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0a ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
kgdb: Registerd I/O driver kgdboc.
kgdb: Waiting for connection from remote gdb...
で止まる。ホスト側で socat して、手元に先の vmlinux 置いて
$ pwd
/usr/src/i386linux
$ gdb -q
(gdb) set remotebaud 115200
(gdb) symbol-file vmlinux
Reading symbols from /usr/src/i386linux/vmlinux...done.
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) target remote /tmp/ttyvHOST
Remote debugging using /tmp/ttyvHOST
kgdb_breakpoint () at kernel/kgdb.c:1677
1677 wmb(); /* Sync point after breakpoint */
(gdb) n
[New Thread 1]
1678 atomic_set(&kgdb_setting_breakpoint, 0);
(gdb) n
1679 }
(gdb) list
1674 atomic_set(&kgdb_setting_breakpoint, 1);
1675 wmb(); /* Sync point before breakpoint */
1676 arch_kgdb_breakpoint();
1677 wmb(); /* Sync point after breakpoint */
1678 atomic_set(&kgdb_setting_breakpoint, 0);
1679 }
1680 EXPORT_SYMBOL_GPL(kgdb_breakpoint);
1681
1682 static int __init opt_kgdb_wait(char *str)
1683 {
(gdb)
をぉ.... # こーして夜がふけてくてくてくてく