URL: https://linuxfr.org/news/utiliser-colout-pour-colorier-tout-ce-qu-affiche-gdb Title: Utiliser colout pour colorier tout ce qu'affiche GDB Authors: nojhan Benoît Sibaud Date: 2014年10月16日T20:30:59+02:00 License: CC By-SA Tags: gdb, colout, terminal et développement Score: 34 Je sais ce que vous pensez : vous avez beau essayer d'utiliser des interfaces graphiques avec le débogueur GDB (GNU Project Debugger), vous finissez toujours par revenir à la bonne vieille ligne de commande, qui seule vous permet de ressentir une flamboyante puissance et une incandescente rapidité d'action. Dans le même temps, vous aimeriez bien que certaines informations importantes soient agrémentées d'un rouge pétant qui saute aux yeux. Comme je vous comprends. Fort heureusement, GDB est un logiciel complètement hackable, ce qui va me permettre d'exaucer vos vœux les plus ardents. Il est en effet possible d'attacher des _hooks_ à chaque commande, et d'y appeler des commandes shell. Afin d'ajouter notre touche de carmin, il suffit donc de récupérer la sortie de la commande et de la faire passer dans un colorisateur écarlate. C'est possible, car GDB permet de _logguer_ tout ce qui se passe et qu'Unix a eu la bonne idée d'inventer les pipes nommés. Pour ajouter la touche de pourpre, un colorisateur capable de gérer facilement des expressions régulières est nécessaire, je vous suggère `colout`. La suite de la dépêche vous donnera un exemple de fichier de configuration à utiliser pour ajouter votre touche d'andrinople à votre propre système. ---- [Exemple avant/après](https://raw.githubusercontent.com/nojhan/colout/gh-pages/gdb_colout.png) [The GNU Project Debugger](http://www.gnu.org/software/gdb/) [Colout, le colorisateur vermillon](http://nojhan.github.io/colout/) [Example de fichier de configuration GDB](https://github.com/nojhan/colout/blob/master/colout/example.gdbinit) ---- Équipé de tous ces outils libres ultra-cools, il suffit d'éditer votre `.gdbinit` préféré : ```gdb # Créer le pipe de communication. shell test -e /tmp/coloutPipe && rm /tmp/coloutPipe shell mkfifo /tmp/coloutPipe # Activer la redirection (à appeler APRÈS votre commande)... define logging_on set logging redirect on. set logging on /tmp/coloutPipe end # la désactiver. define logging_off set logging off set logging redirect off # Voilà la partie foireuse du hack : pour éviter que le prompt ne s'affiche avant la sortie, il faut le faire attendre... shell sleep 0.4s end # Premier exemple : coloration syntaxique complète du code source. define hook-list shell cat /tmp/coloutPipe | colout --all --source Cpp & logging_on end define hookpost-list logging_off end # Deuxième exemple : coloration de la pile. define hook-backtrace # Regexp pour [path]file[.ext]: (.*/)?(?:$|(.+?)(?:(\.[^.]*)|)) shell cat /tmp/coloutPipe | colout "^(#)([0-9]+)\s+(0x\S+ )*(in )*(\S+) (\(.*\)) at (.*/)?(?:$|(.+?)(?:(\.[^.]*)|)):([0-9]+)" red,red,blue,none,green,cpp,none,white,white,yellow normal,bold,normal,normal,bold,normal,normal,bold,bold,bold & logging_on end define hookpost-backtrace logging_off end ``` Vous noterez que dans ce dernier exemple, le numéro de _frame_ est coloré d'un vermeil1 du plus bel effet. 1 C'est quand même dingue le nombre de synonymes de « rouge » dans la langue française, non ?