🌕
lldbコマンド覚書
起動
デバッグを開始するためのコンパイル
-gオプションを付ける
$ gcc -g hoge.c
ファイル名を指定してlldbを起動
$ lldb hoge
関数にブレークポイントを張る
-n
はnameの略
$ br set -n main
※この方法で、指定した関数とは別の箇所に移動する場合、コンパイル時に-gオプションがきちんと付けられているかを確認する。
実行
$ r
プログラムがコマンドライン引数を許可する場合は、r コマンドに引数として指定できます。
$ r arg1 arg2 arg3
基本操作
変数を出力
po
コマンドはPrint Objectの略
$ po 変数
処理を次に進める
n(next)
$ n
ステップインのs
でもOK。
ステップイン
関数がある場合はステップ・イン
なければ現在の位置から 1 行分だけ処理を進める
$ s
変数の一覧を出力
$ frame variable
構造体を出力
pコマンドを使うと構造体名が出力されます。
また、p val[0]と、[0]を指定することで構造体の中身を見ることができます。
$ p val[0]
現在の関数を最後まで実行
$ finish
ブレークポイント
ファイルと行数を指定してブレークポイントを張る
以下は、main.cファイルの50行目にブレークポイントを貼った例
$ b main.c:50
$ br set -f main.c -l 50
ブレークポイントを張った後の移動
r
コマンドで実行して最初のプレークポイントへ移動
その後、次のブレークポイントへの移動はc
(continue)コマンドを使う。
ブレークポイント一覧を出力
$ b
ブレークポイントの削除
$ br delete 1
で1番目のブレークポイントの削除できる
条件を細かく設定
$ br s -f main.c -l 50 -c i==2
上記では、main.cの50行目でiが2のときに停止するようなブレークポイントをセットしている。
グローバル変数の値が変更された時
$ watch set var global_var
設定したグローバル変数の値が変更される時に停止。
その他
実行中の関数から即return
thread returnコマンドを使う
$ th r
ループを抜け出す
$ thread until 42
42は行のことで、行数を指定する。
値の代入
$ expression <式> = <値>
$ po 変数=代入する値
スタックトレースを出力
スタックトレースとは、エラーが発生するまでに、どんな処理をどの順番で呼び出したの履歴
bt
とはthread backtraceの略
$ bt
行 をスキップ
thread jump を使う
th j --by 1
で1行スキップできる。
現在のスレッド上で式を評価
$ call
スタックフレームを選択
番号を指定して、現在のスレッドのスタックフレームを選択
番号はbt
(thread backtrace)で参照
$ f
先のスタックフレームへ移動
$ down
過去のスタックフレームへ移動
$ up
コールスタックを表示(現在のスレッド)
$ _regexp-bt
現在のターゲットプロセスを終了
$ kill
デバッガを終了
$ q
シチュエーション別
セグフォ
・r
で実行
・frame select
あるいはf
とタイプし、少し広く処理が中断した箇所を表示
・bt
で、その場所がmain関数からどのように呼び出されているかを確認
Discussion