- プログラムをコンパイルする場合は、gcc に-g optionをつかいます。
例えばこんな具合。
gcc -g -c programName.c
gcc -g -o programName programName.c
- M-x gdb と打つと "gdb " と出ているので、
そのあとにプログラム名(引数は不要)をいれて Return です。
現在見ているファイルの directory で実行されるので、
実行ファイルのある directory のソースファイルを見ている状態で実行すると良いでしょう。
- debugger 上で、プログラムは実行中と停止状態を繰り返すわけですが、
停止中現在の実行場所を示すため、対応するソース画面が現れ、現在の場所が"=>"で示されます。
下図では、上がコンソールで、下がソース画面です。
- 実行中のプログラムを、あるポイントまで実行したいという場合は
ブレイクポイントを設定します。例えば、
main 関数の開始点で停止させたい場合は、
break main 関数冒頭で停止する場合
としましょう。関数の途中で止めたい場合は、
ソースプログラムの方で止めた行にカーソルを持っていき、"Ctr-x SPACE" としてください。
コンソール画面で
break A.c:7 行番号指定する場合
でもOKです。
break point を除きたい場合は、こんな感じ。
(gdb) info breakpoint break point の一覧表示
Num Type Disp Enb Address What
1 breakpoint keep y 0x0804861a in main at A.c:8
breakpoint already hit 1 time
(gdb) del 1 削除する番号を入力
- プログラムを最初に実行状態にしたいときは、run 引数とします。
一時停止状態のプログラムを実行状態にしたい場合は、
continue します。
- 停止状態で、一行文実行を進めたい場合は、
step (or s) もしくは、
next (or n)と
入力します。
二つの違いは、現在実行中の行に関数呼び出しがある場合は、
step の場合は呼び出された関数の中に入って実行を追い、
next の場合は、単なる一行として実行を追えるというものです。
- 実行中のプログラムは、エラーに衝突したり、Ctr-C を入力されると、
その状態で停止します。
- Local 変数の一覧を見たければ、info locals と入力しましょう。
- 関数呼出し状況を見たければ、where と入力しましょう。
up, downでスタックを移動できるので、各フレームの
local 変数の中身を調べることもできます。
- 停止状態でデータの中身を見たい場合は、
print 式
としてあげます。
print a
print (a * 3)
print array[2]
print obj.field - 2
print objp->field->field
などいろいろ OK です。print の代りに display とすると、次からも表示され続けるようになります。