Comment mettre en évidence et colorer la sortie gdb pendant le débogage interactif?
172
S'il vous plaît ne répondez pas Je devrais utiliser ddd, nemiver, emacs, vim ou tout autre front-end, je préfère juste gdb tel quel, mais j'aimerais voir sa sortie avec des couleurs de terminal.
Cela ne vous donnera pas de couleurs (donc je n'appellerai pas cela une réponse), mais une configuration ~ / .gdbinit améliorera l'expérience. J'utilise ceci comme un strict minimum: définir l'historique enregistrer sur le plateau imprimer joli ensemble output-radix 16 définir la hauteur 0
activout.se
Ce serait bien de changer la réponse acceptée afin que mon ancienne réponse incorrecte puisse être supprimée. Merci.
ddaa
Une fois que la mise en évidence de la ligne actuelle sur lest implémentée sourceware.org/bugzilla/show_bug.cgi?id=21044 , je vais simplement ajouter là a hook-stopet entrer Dev Nirvana.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Réponses:
183
.gdbinit
Vous pouvez modifier votre ~/.gdbinitpour avoir des couleurs. Vous pouvez utiliser mammon .gdbinitqui est disponible ici:
Vous pouvez également le modifier autant que vous le souhaitez. J'ai trouvé cela grâce à cette réponse SO . Voici le type de sortie que vous pouvez obtenir:
Suivant le même concept, GDB Dashboard fournit une interface visuelle modulaire pour GDB en Python.
(nul) marcheur
Un autre projet similaire utilise le support Python de GDB pour fournir plus d'extensibilité, cela vaut donc la peine de vérifier: https://github.com/dholm/voidwalker
@dholm fournit également son propre .gdbinit inspiré du précédent.
pwndbg
Certains projets fournissent un ensemble de fonctions utiles, notamment un affichage amélioré. C'est le cas pour PEDA ou pwndbg . Ce dernier donne la description suivante:
Un remplacement PEDA. Dans l'esprit de notre bon ami windbg, pwndbgse prononce pwnd-bag.
La vitesse
Élasticité
Code propre
Il fournit des commandes pour prendre en charge le débogage et exploiter le développement similaires à ceux de PEDA, et un meilleur affichage (bien que ce ne soit pas l'objectif principal du projet). Le logiciel est encore en cours de développement et n'a pas encore été correctement publié.
Voltron est une interface utilisateur de débogage extensible pour les pirates. Il vous permet d'attacher des vues d'utilitaires s'exécutant dans d'autres terminaux à votre débogueur (LLDB ou GDB), affichant des informations utiles telles que le désassemblage, le contenu de la pile, les valeurs de registre, etc., tout en vous donnant le même CLI de débogage auquel vous êtes habitué.
Vous pouvez modifier votre .gdbinitpour l'intégrer automatiquement. Cependant, l'affichage lui-même est en dehors de GDB (par exemple dans un fractionnement tmux).
FEM
Le FEM est une autre option, et il est décrit comme:
Il est destiné à être utilisé principalement par les exploiteurs et les rétro-ingénieurs, pour fournir des fonctionnalités supplémentaires à GDB en utilisant l'API Python pour aider au cours du processus d'analyse dynamique et de développement d'exploit.
merci beaucoup pour votre réponse, avez-vous une idée comment désactiver la sortie du registre? (J'utilise gdb pour le code C ++ et je n'ai pas besoin de niveau assembleur tout de suite)
vak
Oui. Merde "Les commentaires doivent comporter au moins 15 caractères."
vak le
1
@vak avez-vous essayé set $SHOWCPUREGISTERS = 0? Fondamentalement, vous avez plusieurs paramètres que vous pouvez définir et vous pouvez toujours modifier le code en fonction de vos besoins.
BenC
100
Ce n'est pas des couleurs, mais pensez GDB texte de IUG . Cela fait une énorme différence dans la façon dont gdb est utilisable.
Vous pouvez le lancer avec:
gdb -tui executable.out
Capture d'écran:
Comme vous pouvez le voir, les principales caractéristiques sont:
montre sur quelle ligne de la source nous nous trouvons et les lignes environnantes
Hou la la! Merci! Je cherchais depuis longtemps un bon shell graphique autour de gdb, et j'ai essayé xxgdb, kgdb et ddd, mais aucun d'entre eux ne fonctionnait très bien pour moi, donc je suis resté fidèle à l'ancienne interface de ligne de commande. Mais c'est absolument parfait!
Thomas Padron-McCarthy
46
Ctrl-x Ctrl-a: Entrez ceci pour basculer vers et depuis le mode de l'interface graphique de texte, fonctionne même sans l'option de ligne de commande.
jturcotte
2
L'impression vers stdout à partir du programme casse l'interface pour moi. Des solutions de contournement en plus de le rediriger?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
J'obtiens le même problème avec stdout cassant l'interface. Ctrl-L ou quelle que soit votre liaison de redessiner le rend utilisable au moins. Pour les personnes avec le mode d'édition vi activé, Ctrl-X Ctrl-A ne fonctionne pas, mais la commande 'layout src' vous mettra en mode TUI avec la source affichée comme l'image.
wilywampa
1
Ouvrez un deuxième terminal et exécutez la commande: $ tty Utilisez le résultat pour diriger stdout de la session gdb vers ce terminal à l'aide de la commande (gdb) set inferior-tty. ex. de mon .gdbinit set inferior-tty / dev / tty2 maintenant votre stdout ne gâchera pas $ gdb -tui.
netskink
46
Je sais que vous ne vouliez pas d'interface. Mais qu'en est-il de cgdb, il est très proche de gdb, il est en mode texte mais a une fenêtre source ci-dessus avec une mise en évidence de la syntaxe sur le code.
J'ai juste essayé de l'exécuter: il ne voit pas d'historique gdb, et il a également une invite foutue, où il y a un espace entre le curseur et l'endroit réel où le symbole est tapé (c'est probablement parce que j'ai une invite colorée dans gdb ) . Pas du tout impressionné.
Hi-Angel
19
Il est possible d'améliorer considérablement l'apparence de gdb grâce à l'utilisation de couleurs. Cela se fait via l'une des méthodes suivantes:
Invite colorisée via le "set prompt". Par exemple, mettez l'invite en gras et en rouge:
set prompt \033[1;31m(gdb) \033[m
ou donnez à l'invite une nouvelle forme, en gras et en rouge:
set prompt \033[01;31m\n\n#####################################> \033[0m
Commandes colorisées via des crochets
Mise en évidence de la syntaxe colorisée de la commande "list".
Tous les exemples sont disponibles dans les articles de blog suivants écrits par Michael Kelleher:
@Mike: il serait utile d'afficher le contenu de ces liens ici car le site n'est plus accessible et le fichier robots.txt a empêché archive.org de l'indexer.
Le style de terminal est désormais disponible pour la CLI et le TUI. GNU Source Highlight peut également être utilisé pour donner un style aux extraits de code source. Voir les commandes "set style" ci-dessous pour plus d'informations.
Meilleure réponse JAMAIS! Vous pouvez trouver ici un tutoriel sur la façon d'installer gdb 8.3medium.com/@simonconnah/… , notez que votre machine a besoin d'au moins 512 Mo de RAM, sinon, le gcccompilateur commencera à trash.
utilisateur
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
Avertissement: Buggy. Pas de support TUI, piratage en «mode utilisateur».
J'ai trouvé la partie principale ici
et l'ai un peu modifiée. Besoin de surligner, filt c ++. Si les couleurs sont gâchées, lancez la commande.
Il me dit bash: colout: command not foundquand je coursbt f
utilisateur
4
Je voulais mettre en évidence comme suit: souligner les lignes d'une trace de pile qui appartiennent à mes fichiers source (plutôt que des bibliothèques).
La solution était d'utiliser gdb-python (sur MSYS; sous Linux gdbest généralement livré avec Python intégré déjà?), Hook backtrace, use
Puis traitez stack_traceavec les expressions rationnelles de Python et imprimez-les. Les couleurs grasses et autres sont obtenues par une fonction comme celle-ci:
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)
Un exemple fonctionnel utilisant le hook - même minime - serait probablement plus apprécié.
Hi-Angel
4
Une autre bonne combinaison de couleurs est donnée par cette configuration . Cela rend l'inspection des backtraces beaucoup plus facile. Pour l'utiliser, enregistrez simplement ce fichier sous ~/.gdbinitet exécutez gdb normalement
Merci, c'était précisément ce que je recherchais. Je cherchais une application multi-thread avec une longue pile d'appels et c'est parfait pour ces backtraces.
Johan Bjäreholt le
-2
vous pouvez obtenir toutes les couleurs que vous voulez;
# 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
est implémentée sourceware.org/bugzilla/show_bug.cgi?id=21044 , je vais simplement ajouterl
à ahook-stop
et entrer Dev Nirvana.Réponses:
.gdbinit
Vous pouvez modifier votre
~/.gdbinit
pour avoir des couleurs. Vous pouvez utiliser mammon.gdbinit
qui est disponible ici:https://github.com/gdbinit/gdbinit
Vous pouvez également le modifier autant que vous le souhaitez. J'ai trouvé cela grâce à cette réponse SO . Voici le type de sortie que vous pouvez obtenir:
Un référentiel GitHub est également disponible: https://github.com/gdbinit/Gdbinit
Par ailleurs, la même idée a également été appliquée à lldb .
Tableau de bord GDB
Suivant le même concept, GDB Dashboard fournit une interface visuelle modulaire pour GDB en Python.
(nul) marcheur
Un autre projet similaire utilise le support Python de GDB pour fournir plus d'extensibilité, cela vaut donc la peine de vérifier: https://github.com/dholm/voidwalker
@dholm fournit également son propre .gdbinit inspiré du précédent.
pwndbg
Certains projets fournissent un ensemble de fonctions utiles, notamment un affichage amélioré. C'est le cas pour PEDA ou pwndbg . Ce dernier donne la description suivante:
Il fournit des commandes pour prendre en charge le débogage et exploiter le développement similaires à ceux de PEDA, et un meilleur affichage (bien que ce ne soit pas l'objectif principal du projet). Le logiciel est encore en cours de développement et n'a pas encore été correctement publié.
Voltron
La description du projet indique:
Vous pouvez modifier votre
.gdbinit
pour l'intégrer automatiquement. Cependant, l'affichage lui-même est en dehors de GDB (par exemple dans un fractionnement tmux).FEM
Le FEM est une autre option, et il est décrit comme:
la source
set $SHOWCPUREGISTERS = 0
? Fondamentalement, vous avez plusieurs paramètres que vous pouvez définir et vous pouvez toujours modifier le code en fonction de vos besoins.Ce n'est pas des couleurs, mais pensez GDB texte de IUG . Cela fait une énorme différence dans la façon dont gdb est utilisable.
Vous pouvez le lancer avec:
Capture d'écran:
Comme vous pouvez le voir, les principales caractéristiques sont:
la source
Je sais que vous ne vouliez pas d'interface. Mais qu'en est-il de cgdb, il est très proche de gdb, il est en mode texte mais a une fenêtre source ci-dessus avec une mise en évidence de la syntaxe sur le code.
la source
Il est possible d'améliorer considérablement l'apparence de gdb grâce à l'utilisation de couleurs. Cela se fait via l'une des méthodes suivantes:
Invite colorisée via le "set prompt". Par exemple, mettez l'invite en gras et en rouge:
set prompt \033[1;31m(gdb) \033[m
ou donnez à l'invite une nouvelle forme, en gras et en rouge:
set prompt \033[01;31m\n\n#####################################> \033[0m
Commandes colorisées via des crochets
Tous les exemples sont disponibles dans les articles de blog suivants écrits par Michael Kelleher:
«Beautify GDB», 12 mai 2010 (via archive.org)
«Mise en évidence expérimentale de la syntaxe GDB», 15 mai 2010 (via archive.org)
la source
Nouveau dans la prochaine GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
la source
gdb 8.3
medium.com/@simonconnah/… , notez que votre machine a besoin d'au moins 512 Mo de RAM, sinon, legcc
compilateur commencera à trash.Avertissement: Buggy. Pas de support TUI, piratage en «mode utilisateur».
J'ai trouvé la partie principale ici et l'ai un peu modifiée. Besoin de surligner, filt c ++. Si les couleurs sont gâchées, lancez la commande.
la source
cgdb
est bien mieux quegdb -tui
la source
Bien, je viens de trouver ce hack en utilisant colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
la source
bash: colout: command not found
quand je coursbt f
Je voulais mettre en évidence comme suit: souligner les lignes d'une trace de pile qui appartiennent à mes fichiers source (plutôt que des bibliothèques).
La solution était d'utiliser gdb-python (sur MSYS; sous Linux
gdb
est généralement livré avec Python intégré déjà?), Hookbacktrace
, usePuis traitez
stack_trace
avec les expressions rationnelles de Python et imprimez-les. Les couleurs grasses et autres sont obtenues par une fonction comme celle-ci:la source
Une autre bonne combinaison de couleurs est donnée par cette configuration . Cela rend l'inspection des backtraces beaucoup plus facile. Pour l'utiliser, enregistrez simplement ce fichier sous
~/.gdbinit
et exécutez gdb normalementla source
vous pouvez obtenir toutes les couleurs que vous voulez;
la source