linux のデバッガを使って Gtk+-2 と glib のソースを追いかけます。普通にデバッガを使っても普通はライブラリの中まで入っていけ無いので、ちょっと工夫します。
$ cd ~/src $ wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.10/gtk+-2.10.14.tar.bz2 $ tar xvf gtk+-2.10.14.tar.bz2 $ cd gtk+-2.10.14 $ ./configure --prefix=/home/takashi $ make CFLAGS="-g -O0" $ make install $ cd .. $ http://ftp.gnome.org/pub/gnome/sources/glib/2.12/glib-2.12.13.tar.bz2 $ tar xvf glib-2.12.13.tar.bz2 $ cd glib-2.12.13.tar.bz2 $ make CFLAGS="-g -O0" $ make install $ cd テストプログラム置き場 $ export LD_LIBRARY_PATH=/home/takashi/lib # インストール先 $ ldd hello # ちゃんとリンクされるか確認
実際にソースを読むのは emacs の M-x gdb を使いました。環境変数を設定し、etags でタグをつけると大変快適です。さらに M-x gdb-many-windows や M-x gud-watch を使うと、まるでスクイークでデバッグしているような気分です。最近の進化は素晴らしい。
(shell-command "find ~/src/gtk+-2.10.14/gtk -name '*.[chCH]' -print | etags -o ~/src/gtk+-2.10.14/TAGS -") (shell-command "find ~/src/glib-2.12.13 -name '*.[chCH]' -print | etags -o ~/src/glib-2.12.13/TAGS -") (setq tags-table-list '("~/src/gtk+-2.10.14/TAGS" "~/src/glib-2.12.13/TAGS")) (setenv "LD_LIBRARY_PATH" "/home/takashi/lib")
メモ
- C-s: gud-step (関数の中に入る) C-n: gud-next (同じ関数の次へ進む)
- M-x gdb-many-windows (かっこいい画面モード)
- M-x gud-watch (カーソル位置の変数を調べる)
$ export PKG_CONFIG_PATH=~/lib/pkgconfig