最近、Mac OS X(Marvericks)のターミナル上で、C言語を使って開発しています。その場合、Xcodeを使ってやるのが環境構築するのが一番簡単です。
ただターミナル上、あるいは、EclipseやNetBeansでやる場合には、コマンドを入力する必要があります。
このとき、gccは普通に使えるのですが、gdbがありません。その代わり、デバッグには、lldbを使います。lldbの使い方は、以下より。
簡単にまとめると、以下の通り。
まず、コンパイル時に、デバッグオプション(-g)を追加。
gcc -Wall -O2 -g -c hoge.c
起動時に実行ファイルを指定してlldbを実行。
lldb ./appfile
実行するには「r」(または「run」)をタイプします。これだけで、落ちたときに、その付近の情報(関数名やファイル情報など)を表示してくれます。
(lldb) r
落ちた後でも、変数の内容を確認できます。値を確認するには、p(print) や po(print object)を使います。
(lldb) p 変数名 (lldb) po 変数名
lldbを終わるには、q(quit)をタイプします。
(lldb) q
また、ブレイクポイントを設定する場合には、「breakpoint」コマンドを入力します。例えば、test.cの237行目に設定するには、以下の通り。
(lldb) breakpoint set --file test.c --line 237 (lldb) breakpoint set -f test.c -l 237
あるいは、メソッド名で指定できます。例えば、「hoge()」にブレークポイントを指定したいときは、以下の通りです。うまくいくと、ソースファイルと行番号が表示され、設定されます。
(lldb) breakpoint set --method hoge
ブレークポイントで止めると、以下のようにソースコードと行番号が表示されます。
234 char *p, *p2; 235 int n, nstep, total; 236 // no length -> 237 if (*s == '\0') return def; 238 total = 0; 239 p = s; 240 while (*p != '\0') {
一行ずつ進めるには、n(next)や、s(step-in)や、si(step-inst)をタイプします。
ローカル変数を見たいときは「frame variable」とタイプします。すると、一覧が表示されます。
(lldb) frame variable (int) def = 96 (char *) p2 = 0x00007fff5fbff990 "^" (int) base = 384 (int) n = 0 (char *) p = <variable not available> (int) total = <variable not available> (char *) p2 = 0x00007fff5fbff990 "^"
ローカル変数の「n」の値を見たいときは、「frame variable n」と入力します。
(lldb) frame variable n (int) n = 0