wake-up-neo.com

Verbesserung der g ++ - Ausgabe

g ++ produziert manchmal ziemlich komplizierte Ausgaben. Speziell beim Umgang mit Vorlagen. Gibt es ein Tool, das die Ausgabe von g ++ lesbarer macht? ... zumindest etwas Farbe?

Es mag dumm klingen, diese Frage hier zu stellen, aber ich konnte mich nicht rausschmeißen.

42
slezica

Wenn Sie den Compiler wechseln können, versuchen Sie clang ++ . Die Fehlerausgaben sind meistens sehr klar und manchmal erfahren Sie sogar, was Sie tun müssen, um den Fehler zu beheben. Einen Vergleich der gcc- und clang-Fehlerausgabe finden Sie hier: http://clang.llvm.org/diagnostics.html .

Ansonsten, wie von Matteo Italia angemerkt, siehe STLFilt .

Für den Farbaspekt ist die Lösung von Edwin Buck ( colorgcc ) sehr gut. Sie können Symlinks mit den Namen gcc, g ++ usw. erstellen, sodass sie immer verwendet werden, wenn Sie einen Compiler-Befehl ausführen (vorausgesetzt, Sie legen die Pfade im colorgcc-Skript richtig fest). Ich finde das besonders praktisch, wenn Sie ein großes Projekt aus einem Makefile zusammenstellen. Hilft enorm bei der Erkennung, wo genau etwas schiefgelaufen ist (insbesondere wenn Sie parallele Kompilierungen mit make -j durchführen).

35
Darhuuk

GCC ab 4.9 hat den Output col gefärbt

Fügen Sie Ihrem bashrc/zshrc/what Folgendes hinzu.

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

Es gibt colorgcc , ein Perl-Skript, das die Ausgabe von gcc (g ++) zur besseren Lesbarkeit mit Farbe umgibt.

Was die "Ausgabe" von gcc (g ++) angeht, so vermute ich, dass Sie sich nicht über die kompilierten Binaries beschweren :)

12
Edwin Buck

Ich verbessere es mit sed, um die Ausgabe mit diesem Skript einzufärben:

#!/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

Wenn Sie gcc 4.9 oder höher verwenden, gibt es einige integrierte Optionen:

  • -fmessage-length = n, wodurch die Ausgabe für Zeilen mit n Zeichen optimiert wird.
  • -fdiagnostics-color = immer, wodurch einige Nice-Farben angewendet werden. 
    (Funktioniert gut unter Linux, nicht so sehr unter msys)

Weitere Optionen und die genaue Verwendung finden Sie in der Dokumentation:
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html

6
Benno Straub

Beim Umgang mit der STL1, STLFilt kommt zur Rettung.

In einem Zusammenhang dazu habe ich auch gehört, dass der Clang-Compiler generell wesentlich bessere Fehlermeldungen erzeugt.


Nitpickers Ecke

  1. Eigentlich nicht die SGI-STL, sondern die Teile, die im C++ - Standard übernommen wurden und Teil der Standardbibliothek sind.
3
Matteo Italia

Ich kann Ihre Frage nicht direkt beantworten. Beachten Sie jedoch, dass in Bezug auf Vorlagen die oberste Nachricht (der durch die Vorlage verursachte Fehler) und die untere "hier instanziierte" Nachricht in der Regel viel klarer werden. Ignoriere alle mittleren Nachrichten, da sie wahrscheinlich nicht helfen werden.

2
Mark B

Es gibt colorgcc .

1
js.

da ist meine persönliche Funktion:

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

sie können GilCC verwenden, ein Ruby-Tool, das die GCC-Ausgabe in Echtzeit in Farbe konvertiert. Es ist kostenlos und Sie können es nach Ihren Wünschen anpassen. Es ist nicht aufdringlich, da es Ihr gcc-Setup nicht ändert und Sie keine Systemdateien wie .bash bearbeiten müssen. Sie müssen Ruby installieren und Ruby-Programme von der Befehlszeile aus aufrufen können. Im Moment haben Sie zwei Optionen Perl-Skript oder GilCC und wenn Sie mit Ruby arbeiten, werden Sie GilCC mögen.

Wann immer Sie "GillCC" aufrufen, wird hinter den Kulissen "make" mit Ihren Parametern wie "clean", "debug" oder "release" aufgerufen. Wenn Sie zum Beispiel normalerweise "make debug" aufrufen, sollten Sie "GilCC debug" aufrufen.

Fast vergessen zu erwähnen, dass GilCC einige Statistiken enthält, z. B. Anzahl der Warnungen und Fehler sowie Erstellungszeit. Diese Dinge sind praktisch, wenn Sie versuchen, Ihren Build zu verbessern.

Der Link zur Downloadseite ist hier .

0
Gilson