What is it, naokirin?

GDBのコマンド(簡易まとめ)

GDBのコマンドを探していてこのページにたどり着いた人。ごめんなさい。

私が自分用にまとめただけの記事なので、詳しく知りたい人は他のページを参考にしてください。


・・・という前ふりをしっかり記述して、GDBのコマンドのうちよく使うものをまとめておく。
(括弧内はコマンドの省略形)

ブレークポイント関連
・break(b)
 永続的なブレークポイントを設定する。引数で行数、関数名を指定する。
 例)
 main()関数にブレークポイントを設定。

break main

 main.cの4行目にブレークポイントを設定。

break main.c:4

・tbreak(tb)
 一時的なブレークポイントを設定する。設定の仕方はbreakコマンドと同じ。このコマンドで設定されたブレークポイントは最初にブレークポイントに達したときだけ有効で、その後削除されます。

・watch(wat)
 ウォッチポイントを設定する。引数で変数を指定すると、その変数の値が変化したときに実行を停止します。引数で条件式を指定すると、その条件を満たす場合に実行を停止します。
 例)
 xの値が変化したとき実行を停止。

watch x

 xが0未満になったときに実行を停止。

watch x<0

・condition(cond)
 第1引数で指定したブレークポイントに、第2引数で指定した条件を満たすときのみ実行を停止するようにする。第1引数でのブレークポイントはあらかじめ設定されているものとし、指定方法はブレークポイントの識別番号で指定することに注意する。
 例)
 識別番号「1」のブレークポイントがxが0以上のときのみ停止するように設定する。

condition 1 x>=0

 ※ちなみにbreak ifコマンドで同様の動作をするコマンドが書ける。
  main()にx>=0を満たすときのみ実行を停止するブレークポイントを設定。

break main if x>=0

・delete(d)
 引数で指定された識別番号のブレークポイントを削除する。引数に何もしていしなかった場合は全てのブレークポイントを削除する。

・clear(cle)
 breakコマンドと同じように引数でブレークポイントの場所を指定して、その指定した場所にブレークポイントが設定されていたらそのブレークポイントを削除する。

・disable(dis)
 引数で指定した識別番号のブレークポイントを無効にする。enableコマンドであとで有効に戻すことができる。

・enable(ena)
 引数で指定した識別番号のブレークポイントを有効にする。識別番号はスペースを空けて複数指定できる。「enable once 識別番号」のように指定すると、ブレークポイントでプログラムが停止した後、そのブレークポイントを無効にします。

・info breakpoints(i b)
 現在設定されているブレークポイントの一覧を表示する。


○実行/停止
・run(r)
 プログラムを最初から実行する。引数として渡したものは、プログラムにコマンドライン引数として渡される。

・next(n)
 次の行を実行して停止する。関数呼び出しがおこなわれても、関数を呼び出した後の行で停止します。

・step(s)
 次の行を実行して停止する。関数呼び出しがおこなわれた場合は、その関数に入り、停止する。

・continue(c)
 停止しているプログラムを再開する。

・finish(fin)
 main()関数以外の関数にいるときは、その関数から戻った直後まで実行して停止する。ブレークポイントが途中にあった場合は停止する。

・until(u)
 停止しているループの先頭(whileやforの行)でこのコマンドを実行すると、そのループが終了したところで停止する。ブレークポイントが途中にあった場合は停止する。


○表示
・print(p)
 引数で指定した変数を表示する。
 例)
 変数xを表示する。(上から順に10進数、16進数、文字、文字列、浮動小数点で表示します)

p x
p/x x
p/c x
p/s x
p/f x

また、配列の中身をすべて表示したい場合は次のように行います。たとえばxという配列の10個の要素を表示したい場合、

p *x@10

のように行います。また、次のようにキャストすることで表示させることもできます。

p (int [25]) *x

・display(disp)
 実行を停止するたびに、引数で指定した変数を表示する。

・undisplay(undisp)
 displayの項目を削除する。引数で削除したいdisplayの項目の識別番号を指定する。

・info display(i di)
 displayの項目の一覧を表示する。

○その他
・frame(f)
 引数で指定したスタックフレームを見る。現在のスタックフレーム(実行中の関数)を0として、その親(呼び出し元)を1、さらにその親を2、・・・という風になっている。

・up
 一つ上の呼び出し元の現在の行を見る。

・down
 一つ下の呼び出された部分の現在の行を見る。

・backtrace(ba)
 スタックフレーム全てを見る。

他にもコマンドはいろいろありますが、その他のコマンドも後々追加したいと思います。