2

lldbの特定のソース行にどのようにジャンプしますか?gdbでは、「jump X」になります。ここで、Xは行番号ですが、lldbについて見つけることができる唯一の参照は、http: //lldb.llvm.org/lldb-gdb.htmlです。

現在のプログラムカウンター(命令ポインター)の8バイト先をスキップします。バッククォートを使用して式を評価し、スカラー結果をLLDBに挿入することに注意してください。

(gdb) jump *$pc+8
(lldb) register write pc `$pc+8`

FWIW、MacOSでは、「pc」を「rip」に置き換えると機能するようです。

しかし、この方法を使用すると、特定の行にジャンプするのは非常に難しいようです。lldbにジャンプするためのより良い方法はありますか?

4

2 に答える 2

2

Pythonでこれを行う方法の例が、数日前にlldbリポジトリに追加されました。http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/jump.pyを参照してください

そのファイルの内容をホームディレクトリに保存し~/lldb/jump.pyます。たとえば、次のようなコマンドを使用してlldbにロードします。

command script import ~/lldb/jump.py

(またはこれを~/.lldbinitファイルに入れて)jumpコマンドがあります。

Objective-CプログラムのARC(自動参照カウント)を使用すると、ジャンプすることでプログラムを簡単に台無しにすることができます-無害に見えるジャンプの多くは実際にはそうではありません。これは間違いなく、デバッガのトリックの「ユーザーの注意」/「それで頑張ってください」カテゴリにあります。

于 2013-03-15T01:38:01.107 に答える
1

更新として、LLDBチュートリアルの新機能をここに残します:http://lldb.llvm.org/tutorial.html

最後に、lldbには、行またはフレームの終了ステップモードまで実行されます。(lldb)thread until 100このコマンドは、現在のフレームの行100に達するまで、または現在のフレームを離れる場合に停止するまで、現在のフレームのスレッドを実行します。これは、gdbの「until」コマンドとほぼ同じです。

したがって、(lldb) thread until <lineno>現在のスレッドのトリックを実行します。

また、(lldb) help thread until追加のオプションが含まれています。

于 2015-06-18T20:16:31.413 に答える