Comment mettre en évidence et colorer la sortie gdb lors du débogage interactif?
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.
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:
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. .
(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.
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 prononcepwnd-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.
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).
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.
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:
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:
-
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
-
Commandes colorisées via des crochets
- 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
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.
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