2011年7月14日木曜日

gdbの使い方

C言語での開発は好きじゃない…。
比べればまだいいけど、Javaもあんまり好きじゃない。
気楽なスクリプト言語が一番好み。

でも、仕事では既にC言語で書かれちゃってて、さらにメモリ破壊なんてことが起きたりするわけで。
動かすマシンを買えたらアーキテクチャの違いか何かで、今まで動いていたプログラムが急に動かなくなったりする。
まぁ、潜在的に抱えてたんだろうけど…。

そんな時に使えるのがgdb。
gdbはソースレベルのエントリを利用してデバッグを行うシンボリックデバッガ。
ソースがなく、プログラムしかない場合は機械語レベルでデバッグを行うアブソリュートデバッガを使うけど、ずっと大変そう…。
幸いソースはあるので、gdbを使う。
何ができるかって、プログラムを一行ずつ動かしたりして、その都度変数やスタックなんかを見ることが出来る。

まずは下準備。
-g オプションを付けてコンパイル。
要はこのオプションを付けることで、デバッグに必要な情報を実行ファイルにいれていると思われる。

で、gdbの起動。引数としてデバッグしたいプログラムを渡しちゃうと楽。
$ gdb sample
次はブレイクポイントの設定。
ソースコードを見ながら、挙動を監視したい辺りにブレイクポイントを設定
(gdb) break 5
※短縮してb 5 でも動く

で、いよいよプログラムの実行。
引数はrunコマンドに渡せばいい。
(gdb) run parameter1 parameter2

もちろんブレイクポイントまでで止まる。それ以前にエラーがあればそこで止まるけど。

お次は変数の確認。
(gdb) print hoge
※短縮して p hogeでも動く

次の行に進むには
(gdb) next
※短縮してnでも動く
まとめてN行進むには
(gdb) step N
※短縮してs Nでも動く。Nを省略すると1行進む

次のブレイクポイントまで一気に進むには
(gdb) continue
※短縮してcでも動く

やめたくなったら
(gdb) kill
あるいは一気に
(gdb) quit
で抜けてもいい。gdbが動かしていたプログラムはquitすれば止まる。

以上、簡単な使い方。
もっと詳しく知りたい人は以下で!
http://cl.is.kyushu-u.ac.jp/Literacy/PP/H14/adp/program/compile.html
http://uguisu.skr.jp/Windows/gdb.html

0 件のコメント: