Comment mettre en évidence et colorer la sortie gdb lors du débogage interactif?

StackOverflow https://stackoverflow.com/questions/209534

  •  03-07-2019
  •  | 
  •  

Question

S'il vous plaît, ne répondez pas. Je devrais utiliser ddd, nemiver, emacs, vim ou toute autre interface frontale. Je préfère simplement gdb tel quel, mais j'aimerais voir sa sortie avec quelques couleurs de terminal.

Était-ce utile?

La solution

.gdbinit

Vous pouvez modifier votre ~ / .gdbinit pour obtenir des couleurs. Vous pouvez utiliser le .gdbinit de mammon, disponible ici:

https://github.com/gdbinit/gdbinit

Vous pouvez aussi le modifier autant que vous le souhaitez. J'ai trouvé cela grâce à la réponse à cette SO . Voici le type de sortie que vous pouvez obtenir:

. gdbinit

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

Notons toutefois que la même idée était appliquée à lldb .

Tableau de bord GDB

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

 Tableau de bord GDB

(vide) marcheur

Un autre projet similaire utilise le support Python de GDB pour offrir davantage d’extensibilité. C’est pourquoi il vaut la peine de consulter: 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 de 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 .

     
      
  • Vitesse
  •   
  • Résilience
  •   
  • code propre
  •   

Il fournit des commandes permettant de prendre en charge le débogage et le développement d’exploitations similaires à celles de PEDA, ainsi qu’un meilleur affichage (bien que ce ne soit pas l’axe principal du projet). Le logiciel est en cours de développement et n'a pas encore été publié correctement.

 pwndbg

voltron

La description de projet est:

  

Voltron est une interface utilisateur extensible de débogage pour les pirates. Cela vous permet de   attachez à votre débogueur des vues d’utilitaires exécutées sur d’autres terminaux (LLDB).   ou GDB), affichant des informations utiles telles que le démontage, la pile   contenu, enregistrer les valeurs, etc., tout en vous donnant la même chose   débogueur CLI auquel 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 une division tmux).

 voltron

FEM

FEM est une autre option, décrite comme suit:

  

Il est destiné à être utilisé principalement par les exploiteurs et les ingénieurs de rétro-ingénierie, à   fournir des fonctionnalités supplémentaires à GDB en utilisant l’API Python pour   au cours du processus d’analyse dynamique et de développement d’exploitation.

 GEF

Autres conseils

Ce ne sont pas des couleurs, mais considérons le interface graphique de gdb. Cela fait toute la différence pour que gdb soit utilisable.

Vous pouvez le lancer avec:

gdb -tui executable.out

Capture d'écran:

entrer la description de l'image ici

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

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

Je sais que vous ne vouliez pas d’interface. Mais que diriez-vous de cgdb , il est très proche de gdb, il est en mode texte mais a une fenêtre source ci-dessus avec la syntaxe surlignée sur le code.

Il est possible d'améliorer considérablement l'apparence de gdb grâce à l'utilisation de couleurs. Cela se fait par l’une des méthodes suivantes:

  1. Invite colorisée via l’invite "set set". Par exemple, faites en sorte que l'invite soit en gras et rouge:

    définir l'invite de commande \ 033 [1; 31m (gdb) \ 033 [m

    ou donnez à l'invite une nouvelle forme, en gras et en rouge:

    a défini l'invite \ 033 [01; 31m \ n \ n ############################### ##### > \ 033 [0m

     entrer la description de l'image ici

  2. Commandes colorisées via des crochets

  3. Mise en surbrillance colorisée de la " liste " commande.

Tous les exemples sont disponibles dans les articles de blog suivants écrits par Michael Kelleher:

& Beautile GDB " ;, 12 mai 2010 (via archive.org)

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

#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, bidouille 'en mode utilisateur'.

Trouvé la pièce principale ici . et modifié un peu. Points à souligner, c ++ filt. Si les couleurs sont gâchées, le problème se répète.

cgdb est bien meilleur que gdb -tui

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

avant - après

Je souhaitais souligner les points suivants: accentuez les lignes d’une trace de pile qui appartiennent à mes fichiers source (plutôt qu’aux bibliothèques).

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

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

Traitez ensuite stack_trace avec les expressions rationnelles 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)

Une autre bonne combinaison de couleurs est donnée par configuration . Cela facilite beaucoup l'inspection des pistes de fond. Pour l'utiliser, enregistrez ce fichier sous ~ / .gdbinit et exécutez gdb normalement

Nouveautés dans la GDB 8.3 à venir!

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

  

Le style de terminal est maintenant disponible pour la CLI et la TUI. Source GNU   Highlight peut également être utilisé pour donner du style au code source   extraits. Voir le " définir le style " commandes, ci-dessous, pour plus d'informations.

 capture d'écran de gdb 8.2.91.20190401-23.fc30

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top