lldbとは
ソフトウェアデバッガの一つです。
Macの場合は最初からlldbがあるため、これを使ってデバッグを行ってみます。
今回、引数を必要とするプログラムのデバッグ方法がわからなかったので、まとめてみました。
lldb使用方法
例えば、下記のようなプログラムを動かしたいとします。
int main(int argc, char **argv)
{
t_philo philo;
init_args(argc, argv, &philo);
init_philo_data(&philo);
start_dinner(&philo);
return (0);
}
上記のプログラムの実行方法の例は以下です。
./philo 4 800 200 200 5
このプログラムのデバッグを行います。
lldbを起動する
まず初めに、プログラムをmake
し、実行ファイルphilo
を生成します。
※コンパイル時は-g
オプションを必ず付けてください。
そして、下記のコマンドでlldbの起動をします。
lldb ./philo
下記のコマンドで引数を設定します。
settings set -- target.run-args 4 800 200 200 5
ブレークポイントを設定する場合は、下記のどちらかのコマンドで設定できます。
breakpoint set --name main
br set -n main
上記は関数名を指定していますが、下記のどちらかで関数名と行数を指定することもできます。
br set --file main.c --line 6
br set -f main.c -l 6
最後に、r
またはrun
でlldbが実行されます。
run
lldb実行後
lldb実行後、下記のように今現在デバッグを行なっている行数が指されます。
今、矢印が指している関数を詳しくみていきたい場合はs
またはstep
で関数の中に入れます。
step
次の行(関数)に移動したい場合はn
またはnext
で次に進みます。
next
リークしている部分があれば処理が中断し、下記のように知らせてくれます。
変数を出力
po
(print object)またはprint
コマンドを使用し、任意の出力したい変数名を入れると、その変数の値が表示されます。
print [変数名]
構造体の中身を出力したい場合は、[0]のように値を指定してください。
print philo[0]
(lldb) print philo[0].philo_id
(unsigned int) 1
(lldb) print philo->args.number_of_philo
(unsigned int) 4
終了方法
control
+d
でlldbを終了させることができます。
まとめ
必要最低限のコマンドをまとめてみました。
役立つコマンドや効率の良い方法があればぜひ教えてください。