web-dev-qa-db-fra.com

Comment mettre en évidence et colorer la sortie gdb pendant le débogage interactif?

Veuillez ne pas répondre Je devrais utiliser ddd, nemiver, emacs, vim ou tout autre frontal, je préfère juste gdb tel quel, mais je voudrais voir sa sortie avec certaines couleurs de terminal.

157
elmarco

.gdbinit

Vous pouvez modifier votre ~/.gdbinit Pour avoir des couleurs. Vous pouvez utiliser le .gdbinit De mammon 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 à this SO answer . Voici le type de sortie que vous pouvez obtenir:

.gdbinit

Un référentiel GitHub est également disponible: https://github.com/gdbinit/Gdbinit

En passant, la même idée était également appliquée à lldb .

Tableau de bord GDB

Suivant le même concept, GDB Dashboard fournit une interface visuelle modulaire pour GDB en Python.

GDB Dashboard

(vide) marcheur

Un autre projet similaire utilise la prise en charge de G= Python pour fournir plus d'extensibilité, donc cela vaut la peine d'être vérifié: https://github.com/dholm/voidwalker

@dholm fournit également son propre . gdbinit inspiré du précédent.

(void)walker

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, pwndbg se prononce pwnd-bag.

  • La vitesse
  • Élasticité
  • Code propre

Il fournit des commandes pour prendre en charge le débogage et exploiter un développement similaire à ceux de PEDA, et un meilleur affichage (bien que ce ne soit pas l'objectif principal du projet). Le logiciel est toujours en cours de développement et n'a pas encore été correctement publié.

pwndbg

voltron

La description projet indique:

Voltron est une interface utilisateur de débogueur extensible pour les pirates. Il vous permet de joindre à votre débogueur des vues d'utilitaires fonctionnant dans d'autres terminaux (LLDB ou GDB), affichant des informations utiles telles que le démontage, le contenu de la pile, les valeurs de registre, etc., tout en vous offrant la même CLI de débogueur que vous êtes habitué.

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 split tmux).

voltron

FEM

GEF est une autre option, et elle est décrite comme:

Il est destiné à être utilisé principalement par des exploiteurs et des ingénieurs en rétro-ingénierie, afin de fournir des fonctionnalités supplémentaires à GDB en utilisant l'API Python pour assister pendant le processus d'analyse dynamique et de développement d'exploits.

GEF

171
BenC

Ce ne sont pas des couleurs, mais considérons les gdb text gui . Cela fait une grande différence dans la façon dont gdb est utilisable.

Vous pouvez le lancer avec:

gdb -tui executable.out

Capture d'écran:

enter image description here

Comme vous pouvez le constater, les principales fonctionnalités sont:

  • montre quelle ligne de la source sur laquelle nous sommes et les lignes environnantes
  • affiche les points d'arrêt
92
John Carter

Je sais que tu ne voulais pas d'un frontend. Mais qu'en est-il cgdb il est très proche de gdb, il est en mode texte mais a une fenêtre source ci-dessus avec une coloration syntaxique sur le code.

44
Johan

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:

  1. 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 faites de l'Invite une nouvelle forme, en gras et en rouge:

    set Prompt \033[01;31m\n\n#####################################> \033[0m

    enter image description here

  2. Commandes colorisées via des crochets

  3. Mise en évidence de la syntaxe colorée de la commande "list".

Tous les exemples sont disponibles sur les articles de blog suivants rédigés par Michael Kelleher:

"Beautify GDB", 12 mai 2010 (via archive.org)

"Mise en évidence de la syntaxe expérimentale GDB", 15 mai 2010 (via archive.org)

18
Mike
#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".

Trouvé la partie principale ici et l'a légèrement modifiée. Besoin de mettre en évidence, c ++ filt. Si les couleurs se gâchent, émettez la commande.

7
ftk

cgdb est bien meilleur que gdb -tui

7
justin.yqyang

Neat, je viens de trouver ce hack en utilisant colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit

before - after

5
elmarco

Je voulais mettre en évidence ce qui suit: souligner les lignes d'une trace de pile qui appartiennent à mes fichiers sources (plutôt qu'aux bibliothèques).

La solution consistait à utiliser gdb-python (sous MSYS; sous Linux généralement gdb est livré avec Python déjà intégré?), Hook backtrace, utilisez

python stack_trace = gdb.execute('backtrace', False, True')

Ensuite, traitez stack_trace avec les expressions régulières de Python et imprimez-les. Les couleurs vives 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)
4
Evgeni Sergeev

Nouveau dans le prochain GDB 8.3!

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

Le style de terminal est désormais disponible pour la CLI et la TUI. GNU Source Highlight peut en outre être utilisé pour fournir le style des extraits de code source. Voir les commandes "set style", ci-dessous, pour plus d'informations.

screenshot of gdb 8.2.91.20190401-23.fc30

4
elmarco

--- 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 normalement

3
Andrea Araldo