🌕

lldbコマンド覚書

2021/12/11に公開

起動

デバッグを開始するためのコンパイル

-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