gdb
gdbの使い方
gdb に関してはginoueさんとこがポイントを抑えてまとまっている。
旧:http://home.catv.ne.jp/pp/ginoue/debug/gdb.html
新:http://www.sepia.dti.ne.jp/inoue/debug/gdb.html
ファイヤープロジェクトでは初心者にもわかりやすく、よりつっこんだ使い方まで説明されている。
http://www.fireproject.jp/feature/gdb/index.html
マニュアルの日本語訳はここにある5.0のが最新だろうか。
http://www.coins.tsukuba.ac.jp/~syspro/gdb-5.0-doc/gdb-ja_toc.html
gcc+gdbによるプログラムのデバッグ
http://rat.cis.k.hosei.ac.jp/article/devel/index.html
ginoueさんのところに書かれているのに加えて、これはぜひおさえておきたい:
- 配列の中身を一度に表示する
int* ary = malloc(sizeof(int)*10); (gdb) p *ary@10 # aryの先頭から10個 (gdb) p ary[0]@10 # ary[0]から10個 (gdb) p ary[4]@3 # ary[4]から3個
- ループを抜ける
1 for (i=0; i<100; i++) { 2 a[i] = i; 3 } となっているとき、1行目で until とするとこのループを抜ける。
- 実行制御系のコマンドをVisualStudioの言葉に置き換えると:
- s
- ステップイン
- n
- ステップオーバー
- fin
- ステップアウト
- adv {func|line}
- 指定行の前まで実行
- printf
(gdb) printf "hoge=%d\n", hoge
文字列を表示するユーザ定義コマンドをつくって ~/.gdbinit に書いておくと便利かも。
define ps printf "%s\n", $0 end
[追記:2006-08-28]
上は x/s hoge でもできる。
- ./.gdbinit
実行時に./.gdbinitも読み込まれる。ここに
b debuggie.c:29
などと書いておくと毎回ブレークポイントが設定されるので便利。
TUI
最近の gdb には -tui というオプションがあるらしい。
curses を使ったインターフェイスで、ソースを表示しながら gdb を実行できるというもの。
ちょっと使ってみたが、まだ不安定な機能のようだ。
以下ちょっと注意点:
- ソースの改行コードがCRLFになっていると、ソース表示がおかしくなってしまう。LFにすること。
- .inputrcでC-jがaccept-line以外にバインドされていると、EnterもC-mも効かなくなってしまうので注意。
- すぐにソース表示がおかしくなるので頻繁にC-lで再描画が必須。
病的ソフトウェア
ginoue さんは gdb を「病的ソフトウェア」と書いているが、私も同感です。
オライリーの「GDBハンドブック」の表紙はトカゲだが、いかにも gdb らしいと思う。
なお、この本は参照性が悪く、特につっこんだ使い方が解説されているわけでもないので、買う必要はまったくないと思います。