Ich mache ein Debugging auf Assembly-Ebene in GDB. Gibt es eine Möglichkeit, GDB dazu zu bringen, mir die aktuelle Montageanweisung auf dieselbe Weise anzuzeigen wie die aktuelle Quellzeile? Die Standardausgabe nach jedem Befehl sieht folgendermaßen aus:
0x0001433f 990 Foo::bar(p);
Dies gibt mir die Adresse des aktuellen Befehls, aber ich muss immer wieder auf die Ausgabe von zurückgreifen, disassemble
um zu sehen, welchen Befehl ich gerade ausführe.
Antworten:
Sie können in GDB zum Baugruppenlayout wechseln:
Sehen Sie hier für weitere Informationen. Die aktuelle Montageanweisung wird im Assembler-Fenster angezeigt.
quelle
layout regs
tui reg vector
zum Anzeigen der Vektorregs anstelle der Ganzzahlregs. (Nicht immer sehr benutzerfreundlich, da Sie nicht nur das.v8_int16
oder etwas auswählen können , sodass die Anzeige ein großes Durcheinander darstellt.) Im x86-Tag-Wiki finden Sie eine kurze Anleitung zum Debuggen von asm.si
) und was für eine nutzlose Funktion (Ansichtsfenster, in dem nicht die erforderlichen Informationen angezeigt werden). Es macht keinen Sinn, diese Antwort·layout src
um den Quellcode beim Debuggen zu sehen und sich auch daran zu erinnern, diesen Modus zu verlassenCTRL+x+a
Du kannst tun
und jedes Mal, wenn GDB stoppt, wird die Demontage der nächsten Anweisung angezeigt.
GDB-7.0
unterstützt auchset disassemble-next-line on
, wodurch die gesamte nächste Zeile zerlegt wird und Sie mehr über den Zerlegungskontext erfahren.quelle
si
(aber nichts
)?Der Befehl
kann so eingestellt werden, dass sie mit dem üblichen Konfigurationsmechanismus ständig ausgeführt wird.
quelle
x/ni $pc
die nächsten n Anweisungen anzuzeigen, was oft sehr nützlich ist.Einstellen der folgenden Option:
Sie erhalten Ergebnisse, die wie folgt aussehen:
quelle
Wenn die nächsten Anweisungen beim Durchlaufen des Programms automatisch angezeigt werden sollen, können Sie den Befehl display wie folgt verwenden:
display /3i $pc
Oben werden 3 Anweisungen angezeigt, wenn ein Haltepunkt erreicht wird oder wenn Sie das Programm in einem Schritt ausführen.
Weitere Details im Blogeintrag hier .
quelle
Drücken Sie innerhalb von gdb
Ctrl
x
2
und der Bildschirm wird in 3 Teile geteilt.Der erste Teil zeigt Ihnen den normalen Code in Hochsprache.
Zweitens zeigt Ihnen die Baugruppe äquivalent und entsprechend
instruction Pointer
.Drittens wird Ihnen die normale
gdb
Aufforderung zur Eingabe von Befehlen angezeigt.quelle
Ctrl-X 2
, aber es sieht aus wie eingdb -tui
Modus, der großartig ist.layout split
über die gdb-Eingabeaufforderung erreichbar.GDB-Dashboard
https://github.com/cyrus-and/gdb-dashboard
Diese GDB-Konfiguration verwendet die offizielle GDB-Python-API, um uns zu zeigen, was wir wollen, wenn GDB beispielsweise danach stoppt
next
nach TUI , ähnlich wie bei TUI.Ich habe jedoch festgestellt, dass diese Implementierung eine robustere und konfigurierbare Alternative zum integrierten GDB-TUI-Modus darstellt, wie unter: GDB- Split-Ansicht mit Code erläutert
Zum Beispiel können wir das GDB-Dashboard so konfigurieren, dass Disassemblierung, Quelle, Register und Stapel angezeigt werden mit:
So sieht es aus, wenn Sie stattdessen alle verfügbaren Ansichten aktivieren:
Verwandte Fragen:
quelle