2013-01-31 9 views
6

ソースがないライブラリをデバッグしようとしているので、LLDBの逆アセンブリをたくさん使用しています。スレッドのステップインを呼び出すたびに自動的に逆アセンブルを実行する方法があるかどうか疑問に思っていました。現在、「スレッド・ステップイン」を実行すると、LLDBは命令を実行した後、ブランク・プロンプトで戻ります。 EIPがどこに移動したかを見るためには、すべてのスレッドステップインの後で逆アセンブルを行う必要があります。これは非常に気を散らせ、厄介です(また、LLDBは ';'で式を終了させて​​いないようです。複数のコマンドのLLDBエイリアスを1つにする

もっと一般的には、複数のLLDBコマンドのエイリアスを連続して作成する方法があるのだろうかと思っていました。たとえば、%rdiの内容を印刷できる単一のエイリアス、10行の逆アセンブルEIP。 (はい、私はそれのためのPythonスクリプトを書くことができましたが、私は私の手にそれほどの時間がありません:-(

答えて

1

はい、これを行う正しい方法は、Pythonスクリプトインターフェイスを介してです。デバッガのコマンド言語で十分なフロー制御と実行ロジックを詰め込み、これを可能にするgdbのアプローチを避けるためです(あるいは、むしろ可能...できないように)。そのアプローチの代わりに、 Pythonを使用してタスクを達成する - しかし、デバッガの機能はPythonのかなり使いやすいインターフェイスを介して利用できる。lldbはスクリプト言語をPythonに任せ、簡単で洗練されたAPIを提供することに集中するPythonからの使用

ここで目的を達成するために、なぜstop-disassembly-count設定が必要ですか?実際には、デフォルト設定のstop-disassembly-displayを変更して、~/.lldbinitファイルの逆アセンブリ表示を無効にしない限り、既に必要な操作を行っているはずです。

(lldb) settings show stop-disassembly-count 
stop-disassembly-count (int) = 4 
(lldb) settings show stop-disassembly-display 
stop-disassembly-display (enum) = no-source 
(lldb) 

lldbのデフォルトの動作は、プログラムをステップ実行しているコンテキストの一部の種類を示すことです。ソースコードが利用可能であれば、実行中のソースが表示されます。ソースがない場合は、実行しようとしているアセンブリ命令が表示されます。デバッグ情報があると、デバッガがファイルと行番号を認識しているのにソースコードが利用できない(または別のパスで)場合、ちょっとしたバグがあります - 今はlldbがあなたに逆アセンブルを表示しますが、この場合。ユーザーはまだソースレベルで操作しています(命令レベルのステッピングではsiniの代わりにsnを使用します)、lldbはこのインスタンスではソースファイル名と行番号を表示するだけでコンテキストを表示しません。

+0

問題は、マシンのlldbinitファイルがデバッグされていることが原因です。本当にLLDBが大好きです。助けてくれてありがとう。 – MachPortMassenger

関連する問題