GDB-Split-Ansicht mit Code

110

Ich habe gerade ein Programm in gdb debuggt und irgendwie eine neue Funktion gefunden, die ich noch nie gesehen oder gehört habe, eine geteilte Ansicht, in der ich den Code sehen und durchsuchen kann, zusätzlich zu den folgenden Befehlen:

Entschuldigung für das Bild, aber ttys haben keine Screenshots.

Was ist das? Was habe ich getan oder genauer gesagt, wie kann ich diesen Split-Screen-Modus wieder aktivieren? Gibt es einen Namen für diesen Modus oder kann ich irgendwo lesen, wie man ihn benutzt?

Kevin
quelle
2
Zum schnellen Nachschlagen: Sie können diesen Modus mit Cx Ca, Cx a oder Cx A verlassen. "Siehe diese Frage .
Richard

Antworten:

95

Es heißt TUI (kein Scherz). Beginnen Sie zum Beispiel mit gdbtuioder gdb -tui...

0xC0000022L
quelle
11
Sie können auch layout nextnach dem gdbnormalen Start verwenden
Khaverim
87

Sie können es dynamisch auslösen, indem Sie ctrl+ xund ctrl+ drücken a.

POHAN WU
quelle
danke @ user146043, dies scheint der einzige Weg zu sein, wenn Sie den Bildschirm gleichzeitig mit Strg-A ausführen, um Bildschirmbefehle zu initiieren!
olik79
Sieht so aus, als könnten Sie auch mit dieser Kombination schließen!
Nick Desaulniers
15

Sie können es auch von der GDB-Shell aus mit dem Befehl "-" (Bindestrich) starten. Ich bin mir nicht sicher, wie ich es dynamisch ausschalten soll.

Neowizard
quelle
Dies scheint am einfachsten zu bedienen und zu merken zu sein.
Siyuan Ren
2
Sie können das Programm
dmonopoly
15

GDB-Dashboard

https://github.com/cyrus-and/gdb-dashboard

Das GDB-Dashboard verwendet die offizielle GDB-Python-API und druckt die gewünschten Informationen, wenn GDB beendet wird, z. B. nach a next, wie der native displayBefehl .

Vs TUI:

  • robuster, da es nur auf Standard druckt, anstatt die Shell in einen magischeren Fluchzustand zu versetzen, z.

  • Hochgradig konfigurierbar über Python: Sie können auswählen, was Sie ausgeben möchten und wie groß die einzelnen Abschnitte sind, je nachdem, was Sie debuggen.

    Die nützlichsten Ansichten sind bereits implementiert: Quelle, Assembly, Register, Stapel, Speicher, Threads, Ausdrücke ... aber es sollte einfach sein, sie mit allen Informationen zu erweitern, die in der GDB Python-API verfügbar gemacht werden.

    TUI erlaubt nur die Anzeige von zwei Quellen, Assemblys und Registern, und das ist es. Es sei denn, Sie möchten den C-Quellcode ändern ;-)

Geben Sie hier die Bildbeschreibung ein

Ich glaube, dass GDB mit einem solchen Setup ausgeliefert werden sollte, das standardmäßig aktiviert ist. Auf diese Weise würde es viel mehr Benutzer anziehen.

Oh, und der Hauptentwickler Andrea Cardaci , war sehr und großartig. Ein großes Lob.

Siehe auch: Wie kann ich die GDB-Ausgabe während des interaktiven Debuggens hervorheben und einfärben?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
2
Es gibt nicht genug Worte, um zu beschreiben, wie großartig das ist. Danke :)
unresolved_external
11

Geben Sie layoutals Befehl in gdb ein und das geteilte Fenster wird angezeigt.

Alfred
quelle
5

Wenn sich GDB im Standardmodus befindet, wechselt die Verwendung winautomatisch in den TUI-Modus.
Anderer Befehl für den TUI-Modus:

  • info win
    Listen Sie die Größe aller angezeigten Fenster auf und geben Sie sie an.
  • focus next | prev | src | asm | regs | split
    Setzen Sie den Fokus auf das benannte Fenster. Mit diesem Befehl können Sie das aktive Fenster so ändern, dass die Bildlauftasten in ein anderes Fenster verschoben werden können.

Lesen Sie hier weitere Hilfe.

girardengo
quelle
2

Es gibt auch ein Schnittstellen-Tool für GDB namens cgdb. Auch mit etwas Farbhervorhebung. "ESC", um zur Codeansicht zu wechseln, "i", um zurück zur GDB zu wechseln

cgdb

user3042599
quelle
1

Der Tui-Modus war eindeutig von Emacs inspiriert - ich habe ihn zufällig entdeckt, als ich ^ Xo drückte, das in Emacs zwischen geteilten Fenstern wechselt - manchmal habe ich das abwesend getroffen, wenn ich zu einem anderen Programm wechseln sollte. Dies führt jedoch zu einer weiteren Funktion, die noch nicht erwähnt wurde: Sie können den Cursor mit ^ Xo vom Codefenster (in dem Sie scrollen können) zur Befehlszeile oder umgekehrt bewegen.

Klecks
quelle
Offensichtlich haben die meisten Programme von GNU Emacs wie Tastenkombinationen, hauptsächlich aus Konsistenzgründen. Ich weiß, dass es in bash einen vi-Modus gibt, aber das ist als Emacs-Modus bei weitem nicht gut genug.
Klaus