Wie kann ich die GDB-Ausgabe während des interaktiven Debuggens hervorheben und einfärben?
172
Bitte antworten Sie nicht. Ich sollte ddd, nemiver, emacs, vim oder ein anderes Front-End verwenden. Ich bevorzuge gdb so wie es ist, möchte aber die Ausgabe mit einigen Terminalfarben sehen.
Es gibt Ihnen keine Farben (daher nenne ich dies keine Antwort), aber einige ~ / .gdbinit-Konfigurationen verbessern die Erfahrung. Ich benutze dies als absolutes Minimum: Set-Verlauf auf Set-Print speichern ziemlich gesetzt Output-Radix 16 Set-Höhe 0
activout.se
Es wäre schön, die akzeptierte Antwort zu ändern, damit meine alte, falsche Antwort gelöscht werden kann. Vielen Dank.
Nach dem gleichen Konzept bietet GDB Dashboard eine modulare visuelle Schnittstelle für GDB in Python.
(nichtiger) Walker
Ein anderes ähnliches Projekt verwendet die Python-Unterstützung von GDB, um mehr Erweiterbarkeit zu bieten. Es lohnt sich daher, dies zu überprüfen: https://github.com/dholm/voidwalker
@dholm bietet auch seine eigene .gdbinit, die von der vorherigen inspiriert ist.
pwndbg
Einige Projekte bieten eine Reihe nützlicher Funktionen, einschließlich einer verbesserten Anzeige. Dies ist bei PEDA oder pwndbg der Fall . Letzteres gibt folgende Beschreibung:
Ein PEDA-Ersatz. Im Geist unseres guten Freundes windbg, pwndbgausgesprochen wird pwnd-bag.
Geschwindigkeit
Elastizität
Code bereinigen
Es bietet Befehle zur Unterstützung des Debuggens und der Exploit-Entwicklung, die denen von PEDA ähneln, sowie eine bessere Anzeige (obwohl dies nicht der Hauptfokus des Projekts ist). Die Software befindet sich noch in der Entwicklung und wurde noch nicht ordnungsgemäß veröffentlicht.
Voltron ist eine erweiterbare Debugger-Benutzeroberfläche für Hacker. Sie können Dienstprogrammansichten, die in anderen Terminals ausgeführt werden, an Ihren Debugger (LLDB oder GDB) anhängen und hilfreiche Informationen wie Demontage, Stapelinhalt, Registerwerte usw. anzeigen, während Sie dennoch dieselbe Debugger-CLI erhalten, die Sie gewohnt sind.
Sie können Ihre ändern, .gdbinitum sie automatisch zu integrieren. Das Display selbst befindet sich jedoch außerhalb von GDB (z. B. in einem tmux-Split).
GEF
GEF ist eine weitere Option und wird wie folgt beschrieben:
Es soll hauptsächlich von Exploitern und Reverse Engineers verwendet werden, um GDB mithilfe der Python-API zusätzliche Funktionen bereitzustellen, die den Prozess der dynamischen Analyse und Exploit-Entwicklung unterstützen.
Vielen Dank für Ihre Antwort. Haben Sie eine Idee, wie Sie den Registerausgang ausschalten können? (Ich benutze GDB für C ++ - Code und brauche keine Assembler-Ebene sofort)
Vak
Ja. Verdammt "Kommentare müssen mindestens 15 Zeichen lang sein."
Vak
1
@ Vak hast du versucht set $SHOWCPUREGISTERS = 0? Grundsätzlich haben Sie mehrere Parameter, die Sie einstellen können , und Sie können den Code jederzeit an Ihre Bedürfnisse anpassen.
BenC
100
Es sind keine Farben, aber betrachten Sie die Text-GUI von GDB . Es macht einen großen Unterschied, wie nutzbar GDB ist.
Sie können es starten mit:
gdb -tui executable.out
Bildschirmfoto:
Wie Sie sehen können, sind die Hauptmerkmale:
zeigt, auf welcher Linie der Quelle wir uns befinden und welche Linien wir umgeben
Beeindruckend! Vielen Dank! Ich habe lange nach einer schönen grafischen Shell um gdb gesucht und xxgdb, kgdb und ddd ausprobiert, aber keine davon hat für mich sehr gut funktioniert, also habe ich mich an die einfache alte Befehlszeilenschnittstelle gehalten. Das ist aber absolut perfekt!
Thomas Padron-McCarthy
46
Strg-x Strg-a: Geben Sie diese Option ein, um zum und vom Text-GUI-Modus zu wechseln. Funktioniert auch ohne die Befehlszeilenoption.
Jturcotte
2
Das Drucken auf stdout aus dem Programm bricht die Schnittstelle für mich. Gibt es Problemumgehungen außer der Umleitung?
Ciro Santilli 法轮功 冠状 病 六四 事件 9
1
Ich habe das gleiche Problem mit stdout, das die Schnittstelle bricht. Strg-L oder was auch immer Ihre Redraw-Bindung ist, macht sie zumindest verwendbar. Für Personen mit aktiviertem vi-Bearbeitungsmodus funktioniert Strg-X Strg-A nicht, aber der Befehl 'layout src' versetzt Sie in den TUI-Modus, wobei die Quelle wie im Bild angezeigt wird.
Wilywampa
1
Öffnen Sie ein zweites Terminal und geben Sie den folgenden Befehl ein: $ tty Verwenden Sie das Ergebnis, um stdout von der GDB-Sitzung mit dem Befehl (gdb) set inferior-tty zu diesem Terminal zu leiten. Ex. Von meinem .gdbinit-Set inferior-tty / dev / tty2 wird Ihr stdout jetzt $ gdb -tui nicht durcheinander bringen.
Netskink
46
Ich weiß, dass Sie kein Frontend wollten. Aber wie wäre es mit cgdb, es ist sehr nah an gdb, es ist Textmodus, hat aber oben ein Quellfenster mit Syntaxhervorhebung im Code.
Ich habe gerade versucht, es auszuführen: Es wird keine GDB-Historie angezeigt, und es gibt auch eine vermasselte Eingabeaufforderung, bei der zwischen dem Caret und der tatsächlichen Stelle, an der das Symbol eingegeben wird, ein Leerzeichen steht (dies liegt wahrscheinlich daran, dass ich eine farbige Eingabeaufforderung habe gdb ) . Überhaupt nicht beeindruckt.
Hi-Angel
19
Durch die Verwendung von Farben ist es möglich, das Erscheinungsbild von gdb erheblich zu verbessern. Dies erfolgt über eine der folgenden Methoden:
Farbige Eingabeaufforderung über die "Eingabeaufforderung festlegen". ZB machen Sie die Eingabeaufforderung fett und rot:
set prompt \033[1;31m(gdb) \033[m
oder machen Sie der Eingabeaufforderung eine neue Form, fett und rot:
set prompt \033[01;31m\n\n#####################################> \033[0m
Kolorierte Befehle über Hooks
Hervorhebung der farbigen Syntax des Befehls "list".
Alle Beispiele finden Sie in den folgenden Blog-Beiträgen von Michael Kelleher:
@Mike: Es wäre nützlich, den Inhalt dieser Links hier zu veröffentlichen, da die Site nicht mehr zugänglich ist und robots.txt verhindert hat, dass archive.org sie indiziert.
Das Terminal-Styling ist jetzt für die CLI und die TUI verfügbar. GNU Source Highlight kann zusätzlich zum Styling von Quellcode-Snippets verwendet werden. Weitere Informationen finden Sie in den Befehlen "Stil festlegen" weiter unten.
Beste Antwort aller Zeiten! Hier finden Sie ein Tutorial zur Installation von gdb 8.3medium.com/@simonconnah/… . Beachten Sie, dass Ihr Computer mindestens 512 MB RAM benötigt. Andernfalls gccbeginnt der Compiler mit dem Papierkorb.
Benutzer
7
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
Warnung: Buggy. Keine TUI-Unterstützung, 'User-Mode'-Hack.
Habe den Hauptteil hier gefunden
und ein bisschen modifiziert. Benötigt Highlight, C ++ Filt. Wenn die Farben durcheinander geraten, geben Sie den Befehl erneut ein.
Einverstanden. Einfache Zeilen, die von meinem Programm gedruckt wurden, haben die Konsole von gdb-tui zerstört. Dies geschieht nicht unter cgdb. Danke für den Tipp!
Verarbeiten Sie dann stack_tracemit Pythons regulären Ausdrücken und drucken Sie sie aus. Fett und andere Farben werden durch eine Funktion wie diese erreicht:
def term_style(*v):"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""return'\x1B['+';'.join(map(str, v))+'m'#Use like this:print term_style(1)+'This will be bold'+ term_style(0)#Reset.print term_style(1,30)+'This will be bold and coloured'+ term_style(0)print term_style(1,30,40)+'Plus coloured background'+ term_style(0)
Ein funktionierendes Beispiel, das den Haken verwendet - auch wenn er minimal ist - wäre wahrscheinlich willkommener.
Hi-Angel
4
Eine weitere gute Farbkombination ergibt sich aus dieser Konfiguration . Dies erleichtert das Überprüfen der Rückverfolgungen erheblich. Um es zu verwenden, speichern Sie diese Datei einfach unter ~/.gdbinitund führen Sie gdb normal aus
Danke, genau das habe ich gesucht. Ich habe mir eine Multithread-Anwendung mit einem langen Aufrufstapel angesehen, und diese ist perfekt für diese Backtraces.
Johan Bjäreholt
-2
Sie können jede gewünschte Farbe erhalten;
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
l
wird sourceware.org/bugzilla/show_bug.cgi?id=21044 implementiert . Ich fügel
sie einfach zu a hinzuhook-stop
und gebe Dev Nirvana ein.Antworten:
.gdbinit
Sie können Ihre
~/.gdbinit
Farben optimieren . Sie können Mammons verwenden,.gdbinit
die hier erhältlich sind:https://github.com/gdbinit/gdbinit
Sie können es so oft anpassen, wie Sie möchten. Ich fand dies dank dieser SO-Antwort . Hier ist die Art der Ausgabe, die Sie erhalten können:
Ein GitHub-Repository ist ebenfalls verfügbar: https://github.com/gdbinit/Gdbinit
Nebenbei bemerkt wurde die gleiche Idee auch auf lldb angewendet .
GDB-Dashboard
Nach dem gleichen Konzept bietet GDB Dashboard eine modulare visuelle Schnittstelle für GDB in Python.
(nichtiger) Walker
Ein anderes ähnliches Projekt verwendet die Python-Unterstützung von GDB, um mehr Erweiterbarkeit zu bieten. Es lohnt sich daher, dies zu überprüfen: https://github.com/dholm/voidwalker
@dholm bietet auch seine eigene .gdbinit, die von der vorherigen inspiriert ist.
pwndbg
Einige Projekte bieten eine Reihe nützlicher Funktionen, einschließlich einer verbesserten Anzeige. Dies ist bei PEDA oder pwndbg der Fall . Letzteres gibt folgende Beschreibung:
Es bietet Befehle zur Unterstützung des Debuggens und der Exploit-Entwicklung, die denen von PEDA ähneln, sowie eine bessere Anzeige (obwohl dies nicht der Hauptfokus des Projekts ist). Die Software befindet sich noch in der Entwicklung und wurde noch nicht ordnungsgemäß veröffentlicht.
Voltron
In der Projektbeschreibung heißt es:
Sie können Ihre ändern,
.gdbinit
um sie automatisch zu integrieren. Das Display selbst befindet sich jedoch außerhalb von GDB (z. B. in einem tmux-Split).GEF
GEF ist eine weitere Option und wird wie folgt beschrieben:
quelle
set $SHOWCPUREGISTERS = 0
? Grundsätzlich haben Sie mehrere Parameter, die Sie einstellen können , und Sie können den Code jederzeit an Ihre Bedürfnisse anpassen.Es sind keine Farben, aber betrachten Sie die Text-GUI von GDB . Es macht einen großen Unterschied, wie nutzbar GDB ist.
Sie können es starten mit:
Bildschirmfoto:
Wie Sie sehen können, sind die Hauptmerkmale:
quelle
Ich weiß, dass Sie kein Frontend wollten. Aber wie wäre es mit cgdb, es ist sehr nah an gdb, es ist Textmodus, hat aber oben ein Quellfenster mit Syntaxhervorhebung im Code.
quelle
Durch die Verwendung von Farben ist es möglich, das Erscheinungsbild von gdb erheblich zu verbessern. Dies erfolgt über eine der folgenden Methoden:
Farbige Eingabeaufforderung über die "Eingabeaufforderung festlegen". ZB machen Sie die Eingabeaufforderung fett und rot:
set prompt \033[1;31m(gdb) \033[m
oder machen Sie der Eingabeaufforderung eine neue Form, fett und rot:
set prompt \033[01;31m\n\n#####################################> \033[0m
Kolorierte Befehle über Hooks
Alle Beispiele finden Sie in den folgenden Blog-Beiträgen von Michael Kelleher:
"Beautify GDB", 12. Mai 2010 (via archive.org)
"Experimentelle Hervorhebung der GDB-Syntax", 15. Mai 2010 (via archive.org)
quelle
Neu in der kommenden GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
quelle
gdb 8.3
medium.com/@simonconnah/… . Beachten Sie, dass Ihr Computer mindestens 512 MB RAM benötigt. Andernfallsgcc
beginnt der Compiler mit dem Papierkorb.Warnung: Buggy. Keine TUI-Unterstützung, 'User-Mode'-Hack.
Habe den Hauptteil hier gefunden und ein bisschen modifiziert. Benötigt Highlight, C ++ Filt. Wenn die Farben durcheinander geraten, geben Sie den Befehl erneut ein.
quelle
cgdb
ist viel besser alsgdb -tui
quelle
Ordentlich, ich habe diesen Hack gerade mit colout gefunden: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
quelle
bash: colout: command not found
wenn ich laufebt f
Ich wollte Folgendes hervorheben: Betonen Sie die Zeilen eines Stack-Trace, die zu meinen Quelldateien gehören (und nicht zu Bibliotheken).
Die Lösung bestand darin, gdb-python zu verwenden (unter MSYS; unter Linux ist
gdb
Python normalerweise bereits integriert?), Hookbacktrace
, useVerarbeiten Sie dann
stack_trace
mit Pythons regulären Ausdrücken und drucken Sie sie aus. Fett und andere Farben werden durch eine Funktion wie diese erreicht:quelle
Eine weitere gute Farbkombination ergibt sich aus dieser Konfiguration . Dies erleichtert das Überprüfen der Rückverfolgungen erheblich. Um es zu verwenden, speichern Sie diese Datei einfach unter
~/.gdbinit
und führen Sie gdb normal ausquelle
Sie können jede gewünschte Farbe erhalten;
quelle