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)
スタックフレーム全てを見る。
他にもコマンドはいろいろありますが、その他のコマンドも後々追加したいと思います。