2013-01-31 15 views
6

Ich versuche, eine Bibliothek zu debuggen, deren Quelle ich nicht habe, also benutze ich LLDB Disassembly viel. Ich habe mich gefragt, ob es eine Möglichkeit gibt, Disassembly automatisch nach jedem Aufruf von "Thread-In" zu starten. Momentan führt LLDB den Befehl aus und kehrt dann mit einer leeren Eingabeaufforderung zurück. Um zu sehen, wohin der EIP verschoben wurde, muss ich nach jedem Thread-Step disassemblieren, was extrem störend und ärgerlich ist (auch scheint LLDB Ausdrücke nicht mit ';' zu beenden, also mehrere Befehle auf eine Zeile zu setzen) Ich habe mich gefragt, ob es eine Möglichkeit gibt, einen Alias ​​für mehrere LLDB-Befehle hintereinander zu erstellen: Zum Beispiel einen einzelnen Alias, der den Inhalt von% rdi ausgeben könnte, und dann 10 Zeilen zerlegen EIP. (Ja, ich könnte Python-Skript dafür schreiben, aber ich habe nicht so viel Zeit auf meiner Hand :-(LLDB Alias ​​für mehrere Befehle als ein

Antwort

1

Ja, der richtige Weg, dies zu tun ist über die Python-Skript-Schnittstelle. Es gab eine bewusste Entscheidung zu vermeiden, dass gdb in der Befehlssprache des Debuggers genügend Flow-Control- und Execution-Logik einbringt, um dies möglich zu machen (oder vielmehr - um es möglich zu machen ... schlecht). Statt dieser Vorgehensweise gibt es eine niedrige Barriere, wo Sie brauchen Python zur Erledigung einer Aufgabe verwenden - aber die volle Leistungsfähigkeit des Debuggers ist über einige einfach zu bedienende Oberflächen in Python verfügbar.lldb überlässt die Skriptsprache Python und konzentriert sich auf die Bereitstellung einer sauberen und leistungsfähigen API, die einfach zu bedienen ist Verwenden Sie aus Python

Aber um Ihr Ziel hier anzusprechen, warum nicht die stop-disassembly-count Einstellung tun, was Sie brauchen? In der Tat sollte es bereits tun, was Sie wollen, es sei denn, Sie haben Disassemblierungsanzeige in Ihrer ~/.lldbinit Datei durch Ändern der Standardeinstellung stop-disassembly-display deaktiviert.

(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 Standardverhalten ist einig Art von Kontext zu zeigen, wenn Sie durch ein Programm verstärken. Wenn Quellcode verfügbar ist, wird die Quelle angezeigt, durch die Sie gehen. Wenn keine Quelle vorhanden ist, werden die Baugruppenanweisungen angezeigt, die ausgeführt werden sollen. Es gibt einen kleinen Fehler, wenn Sie Debug-Informationen haben (also der Debugger kennt Datei- und Zeilennummern), aber der Quellcode ist nicht verfügbar (oder auf einem anderen Pfad) - gerade wird lldb Ihnen die Disassemblierung zeigen, aber das ist nicht das richtige Verhalten dieser Fall. Benutzer arbeiten immer noch auf einer Quellenebene (unter Verwendung von s und n anstelle von si und ni für stepping auf Anweisungsebene) und lldb sollte in dieser Instanz keinen Kontext anzeigen, sondern nur den Namen der Quelldatei und die Zeilennummer anzeigen.

+0

Okay, das Problem war mit der lldbinit-Datei auf der Maschine wurde debuggen. Wirklich lieben LLDB. Danke für die Hilfe. – MachPortMassenger