Comment mettre en valeur et colorer la sortie gdb lors du débogage interactif?
Veuillez ne pas répondre, je devrais utiliser ddd, nemiver, emacs, vim, ou de toute autre front-end, je préfère juste gdb comme il est, mais il souhaiterait que sa sortie avec quelques terminal de couleurs.
10 réponses
.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 l'ajuster autant que vous voulez aussi. J'ai trouvé cela grâce à cette réponse ainsi . Voici le type de sortie que vous pouvez obtenir:
un dépôt GitHub est également disponible: https://github.com/gdbinit/Gdbinit
sur une note latérale, la même idée était également appliqué à lldb .
GDB tableau de bord
suivant le même concept, gdb Dashboard fournit une interface visuelle modulaire pour GDB en Python.
(nul)walker
un autre projet similaire utilise le support Python de GDB pour fournir plus d'extensibilité, donc cela vaut la peine de vérifier: https://github.com/dholm/voidwalker
@dholm fournit aussi son propre .gdbinit inspiré du précédent.
pwndbg
certains projets fournissent un ensemble de fonctions utiles, y compris l'amélioration de l'affichage. C'est le cas pour PEDA ou pwndbg . Ce dernier donne la description suivante:
UN PEDA de remplacement. Dans l'esprit de notre bon ami
windbg
,pwndbg
se prononcepwnd-bag
.
- vitesse
- résilience
- code Propre
il fournit des commandes pour soutenir le débogage et exploiter le 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é publié correctement.
voltron
le la description du projet se lit comme suit:
Voltron est une interface utilisateur de débogage extensible pour les hackers. Il vous permet de attachez à votre débogueur (LLDB) les vues d'utilitaire tournant dans d'autres terminaux. ou GDB), en affichant des informations utiles telles que le démontage, la pile contenu, valeurs de registre, etc, tout en vous donnant toujours la même vous avez l'habitude de déboguer CLI.
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, et il est décrit comme:
il est destiné à être utilisé principalement par les exploiteurs et les fournir des fonctionnalités supplémentaires à GDB en utilisant L'API Python pour aider au cours du processus de analyse dynamique et exploitation du développement.
il ne s'agit pas de couleurs, mais de gdb texte 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:
comme vous pouvez le voir, les principales caractéristiques sont:
- montre à quel ligne de la source, nous sommes sur et autour des lignes de
- affiche les points d'arrêt
Il est possible d'améliorer grandement la figure de gdb par l'utilisation de couleurs. Cela se fait par l'une des méthodes suivantes:
- invite colorisée via l'invite"set". Par exemple, faites le prompt en gras et rouge:
set prompt 3[1;31m(gdb) 3[m
- commandes colorisées via des crochets
- mise en évidence de la syntaxe colorisée de la commande" list".
tous les exemples sont disponibles sur le blog suivant billets écrits par Michael Kelleher:
"Beautify GDB", 12 mai 2010 (via archive.org)
"Expérimental GDB de la syntaxe", 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 3[0m
end
document re
Restore colorscheme
end
Attention: Buggy. Pas de support TUI, "mode utilisateur" hack.
trouvé la partie principale ici et l'a modifié un peu. A besoin de highlight, c++filt. Si les couleurs sont abîmées, lancez la commande.
j'ai voulu souligner comme suit: soulignez les lignes d'une trace de pile qui appartiennent à mes fichiers source (plutôt qu'aux bibliothèques).
la solution était d'utiliser gdb-python (sur MSYS; sur Linux typiquement gdb
vient avec Python intégré déjà?), crochet backtrace
, utiliser
python stack_trace = gdb.execute('backtrace', False, True')
puis traiter stack_trace
avec les regexes de Python, et les imprimer. Les couleurs en gras 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)
Neat, je viens de trouver ce hack en utilisant colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
une autre bonne combinaison de couleurs est donnée par cette configuration . Cela rend l'inspection des retraces beaucoup plus facile. Pour l'utiliser, enregistrez ce fichier comme ~/.gdbinit
et lancez gdb normalement
vous pouvez obtenir les couleurs qui vous voulez;
# gdb
(gdb) shell echo -en '\E[47;34m'"3[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal