gdbデバッガーでCのプログラムをデバッグ
とあるCのプログラムをUbuntuに移植することになりました。
なかなかうまく動かずどこが原因か特定するためgdbを使用しました。
簡単な使用手順です。
まずはコンパイルするときに-gオプションでデバッグ情報を埋め込みます。
gcc -g test.c
といった感じに。
次にgdbを起動します。
gdb test
ここではtestという実行ファイルを読み込んで起動してますが、
gdbを起動したあとにfileコマンドで読み込んでも同じです。
gdb
file /home/aaa/test
まずはブレイクポイントの設定です。
設定例
break main
break 100
1つ目はmain関数にブレイクポイントを設定しました。
2つ目はソースの100行目にブレイクポイントを設定しました。
そうしましたらrunコマンドで実行です。
r
breakポイントで止まるので次のコマンドで進めていきます。
s STEP実行
n NEXT実行
c continue
sは関数があればその関数の中に入っていきますし、nは関数の中には入りません。cは次のブレイクポイントまで実行します。
一度コマンドを入力したら続けてEnterを押せば同じコマンドを繰り替えしてくれます。
途中でソースが見たくなったらlistコマンドで表示できます。
list 200
ソースの200行目を中心として前後10行表示します。
Enterで先に送れます。
変数の内容が見たい場合はprintコマンドです。
p hensuu
変数の内容を常に追跡したい場合はdisplayコマンドです。
display hensuu
あとは、途中で画面をクリアしたくなったらshellコマンドからclearを実行します。
shell clear
途中でshellに入る場合はそのまま引数なしでshellコマンドを実行し、exitでgdbに戻れます。
あとはメモリの内容を表示したい場合はexamineコマンドです。
x アドレス
例: x/8xb 0xffff0011 、 アドレス0xffff0011の中をHEXで8個見せる
- n 規定値1 、uで指示した単位
- f 表示形式、規定値は16進
- u メモリサイズの単位
- b バイト
- h 2バイト
- w 4バイト(規定値)
- g 8バイト
これぐらい使えればいいんじゃないでしょうか。
参考URL
http://www.fireproject.jp/feature/gdb/
http://www.madlabo.com/mad/edat/GDB/index.htm#SEC23