web-dev-qa-db-fra.com

Amélioration de la sortie g ++

g ++ produit parfois des sorties plutôt compliquées. Particulièrement lorsqu'il s'agit de modèles. Existe-t-il un outil qui rende la sortie de g ++ plus lisible? ... au moins un peu de couleur?

Cela peut sembler idiot de poser cette question ici, mais je n’ai pas réussi à trouver mon chemin sur Google.

42
slezica

Si vous êtes libre de changer de compilateur, essayez clang ++ . Les sorties d'erreur sont la plupart du temps très claires et parfois, elles vous indiqueront même quoi faire pour corriger votre erreur. Vous pouvez trouver une comparaison de la sortie d’erreur gcc vs clang ici: http://clang.llvm.org/diagnostics.html .

Sinon, comme l’a noté Matteo Italia, recherchez STLFilt .

Pour la couleur, la solution d'Edwin Buck ( colorgcc ) est très bonne. Vous pouvez créer des liens symboliques nommés gcc, g ++, etc. pour qu'il soit toujours utilisé chaque fois que vous exécutez une commande du compilateur (à condition que vous ayez correctement configuré les chemins d'accès dans le script colorgcc). Je trouve cela particulièrement pratique lors de la compilation d’un gros projet à partir d’un Makefile. Aide énormément à détecter exactement où quelque chose s'est mal passé (surtout lorsque vous effectuez des compilations parallèles avec make -j).

35
Darhuuk

GCC à partir de 4,9 a coloré la sortie

Ajoutez ce qui suit à votre bashrc/zshrc/what.

export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
40
David C. Bishop

Il y a colorgcc , un script Perl qui enveloppe la sortie gcc (g ++) de couleurs pour une lisibilité améliorée.

En ce qui concerne la "sortie" de gcc (g ++), je suppose que vous ne vous plaignez pas des fichiers binaires compilés :)

12
Edwin Buck

Je l’améliore en utilisant sed pour colorer la sortie avec ce script:

#!/bin/bash
while read x ; do echo $x ; done \
| sed -e "s/.*error:.*/\x1b[1;36m&\x1b[0m/" \
-e "s/.*warning:.*/\x1b[1;36m&\x1b[0m/" \
-e "s/^\(.*\)\(required from\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
-e "s/^\(.*\)\(In instantiation of\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
-e "s/^\(.*\)\(In member\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
| sed -e "s/error:/\x1b[1;31m&\x1b[1;36m/" \
-e "s/warning:/\x1b[1;35m&\x1b[1;36m/" \
-e "s/note:/\x1b[1;30m&\x1b[0m/"
10
Paul Fultz II

Si vous utilisez la version 4.9 ou supérieure de gcc, il existe deux options intégrées:

  • -fmessage-length = n, ce qui optimise la sortie pour des lignes de n caractères.
  • -fdiagnostics-color = toujours, qui applique quelques jolies couleurs. 
    (Fonctionne bien sur linux, pas tellement sur msys)

Pour plus d'options et d'utilisation exacte, voici la documentation:
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html

6
Benno Straub

Quand on traite avec le TSL1, STLFilt vient à la rescousse.

Sur une note connexe, j'ai également entendu dire que le compilateur Clang produit en soi beaucoup de messages d'erreur bien meilleurs.


Le coin des nonpiqueurs

  1. En réalité, pas le STL SGI, mais ses parties qui ont été adoptées dans la norme C++ et font partie de la bibliothèque standard.
3
Matteo Italia

Je ne peux pas répondre directement à votre question, mais notez qu'en ce qui concerne les modèles, si vous regardez le message du haut (l'erreur provoquée par le modèle) et le message "instancié à partir d'ici", cela devient généralement beaucoup plus clair. Ignorez tous les messages du milieu car ils ne vont probablement pas aider.

2
Mark B

Il y a colorgcc .

1
js.

il y a ma fonction personnelle:

colorgcc()
{
Perl -wln -M'Term::ANSIColor' -e '
m/not found$/ and print "\e[1;30m$`\e[0m", "$&", "\e[0m"
or
m/found$/ and print "\e[1;30m$`\e[0;32m", "$&", "\e[0m"
or
m/yes$/ and print "\e[1;30m$`\e[0;32m", "$&", "\e[0m"
or
m/no$/ and print "\e[1;30m$`\e[0m", "$&", "\e[0m"
or
m/ Error |error:/i and print "\e[1;91m", "$_", "\e[0m"
or
m/ Warning |warning:/i and print "\e[0;33m", "$_", "\e[0m"
or
m/nsinstall / and print "\e[0;36m", "$_", "\e[0m"
or
m/Linking |link: |\.a\b/ and print "\e[1;36m", "$_", "\e[0m"
or
m/Building|gcc|g++|\bCC\b|\bcc\b/ and print "\e[1;30m", "$_", "\e[0m"
or
print; '
}
0
scavenger

vous pouvez utiliser GilCC, un outil Ruby qui convertira la sortie GCC en couleur en temps réel. C'est gratuit et vous pouvez le personnaliser selon vos préférences. Ce n'est pas intrusif car cela ne change pas votre configuration gcc et vous n'avez pas à éditer de fichiers système tels que .bash. Vous devez installer Ruby et pouvoir appeler les programmes Ruby à partir de la ligne de commande. Pour le moment, vous avez le script Perl ou GilCC à votre disposition et si vous travaillez avec Ruby, vous aimerez GilCC.

Ensuite, chaque fois que vous appelez "GillCC", il appelle "make" dans les coulisses avec vos paramètres tels que "clean", "debug" ou "release". Par exemple, si vous appelez normalement "make debug", vous devez appeler "debug GilCC".

J'ai presque oublié de mentionner que GilCC contient des statistiques telles que le nombre d'avertissements et d'erreurs, ainsi que le temps de compilation. Ces choses sont utiles lorsque vous essayez d’améliorer votre construction.

Le lien vers la page de téléchargement est ici .

0
Gilson