GDBの使い方

/hoge/src

hogehoge.c
というソースと
hogehoge
という実行バイナリがあるとする。
まずは普通にプロセスを起動する。
デバッグしたいプロセスのPIDを調査。
$ gdb
(gdb) file /hoge/src/hogehoge ←実行バイナリの指定
(gdb) directory /hoge/src/ ←ソースファイルのパスを指定
(gdb) break hoge_func ←ブレークポイントの設定(この場合hoge_funcという関数が存在するとする)
(gdb) attach プロセスID
attachした瞬間に実行中のプロセスは一時停止するらしい・・・。
継続動作するときはcontinue
(ただし、continueするとブレークポイントも無視されるので普通にデバッグできない。
普通に動かしてるのと変わらなくなる?)
ちなみにcontinueの中断はCTRL+C
まずは現在位置を調べる
(gdb) bt
設定済みのブレークポイント一覧
(gdb) info break
ブレークポイントの削除
(gdb) delete ブレークポイント番号(ブレークポイント一覧で確認可能)
サーバ側で必要な処理に到達するように、クライアントを操作。
スタックフレーム(ほぼ関数ととらえて良し)単位で処理をすすめる
(gdb) finish
ブレークポイントに到達したら変数の中身を継続表示させる
display 変数名
ステップ実行(ソースの異なる行に到達するまで実行する。本当の一行ずつ)
(gdb) s
ステップ実行(スタックフレーム内での次の行まで実行する。スタックフレームから別の関数を呼び出す場合は一気に処理をする)
(gdb) n
ステップ実行の挙動はこんな感じ
(gdb) n
372 mysql_free_result(result); ←この行は実行されている。
1: 指定した変数の状態
デバッガ情報が不足していると、なんか変な挙動をしたりするらしい・・・?
デバッガ情報を付与するには、gccでコンパイルするときに、-gオプションを指定する。
ブレークポイントに飛ぶにはjump?
指定した関数や行XXXに飛ぶ。飛んだあと処理は続いてcontinueと同じ条件でとまる。
(gdb) jump XXX
最初に戻ったり、一つ手前に戻るには?
※参考サイト
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_toc.html
http://www.fireproject.jp/feature/gdb/index.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です