最近、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