web-dev-qa-db-ja.com

g ++出力の改善

g ++は、かなり複雑な出力を生成することがあります。特にテンプレートを扱う場合。 g ++の出力を読みやすくするツールはありますか? ...少なくともいくつかの色?

ここでこの質問をするのは馬鹿げているように思えるかもしれませんが、私はこれから抜け出す方法をGoogleで検索できませんでした。

44
slezica

コンパイラを自由に切り替えることができる場合は、 clang ++ を試してください。ほとんどの場合、エラー出力は非常に明確であり、エラーを修正するために何をすべきかを伝えることもあります。ここで、gccとclangのエラー出力の比較を見つけることができます: http://clang.llvm.org/diagnostics.html

それ以外の場合は、Matteo Italiaによって指摘されているように、 STLFilt を参照してください。

色の側面については、エドウィンバックの解( colorgcc )が非常に優れています。 gcc、g ++などの名前のシンボリックリンクを作成して、コンパイラコマンドを実行するときに常に使用されるようにすることができます(colorgccスクリプトでパスを正しく設定した場合)。これは、Makefileからいくつかの大きなプロジェクトをコンパイルするときに特に便利です。何か問題が発生した場所を検出するのに非常に役立ちます(特にmake -jを使用して並列コンパイルを行う場合)。

36
Darhuuk

4.9以降のGCCは出力を色分けしています☺

以下をbashrc/zshrc/whateverに追加します。

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

読みやすくするためにgcc(g ++)出力を色でラップするPerlスクリプト colorgcc があります。

Gcc(g ++)の「出力」に関する限り、コンパイルされたバイナリについて不満を言っているのではないでしょう:)

12
Edwin Buck

このスクリプトでsedを使用して出力に色を付けることで、それを改善します。

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

Gcc 4.9以降を使用する場合、いくつかの組み込みオプションがあります。

  • -fmessage-length =n。n文字長の行の出力を最適化します。
  • -fdiagnostics-color = always、いくつかの素敵な色を適用します。
    (Linuxでは正常に機能しますが、msysではあまり機能しません)

その他のオプションと正確な使用方法については、ドキュメントをご覧ください。
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html

6
Benno Straub

直接お答えすることはできませんが、テンプレートに関しては、上部のメッセージ(テンプレートによって発生したエラー)と下部の「ここからインスタンス化されました」というメッセージを見ると、通常ははるかに明確になります。おそらく役に立たないので、すべての中間メッセージを無視します。

2
Mark B

colorgcc があります。

1
js.

私の個人的な機能があります:

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; '
}
1
scavenger

GilCCを使用できます。これは、GCC出力をリアルタイムでカラーに変換するRubyツールです。それは無料であり、あなたはあなたの好みに合わせてそれをカスタマイズすることができます。 gcc設定を変更せず、.bashなどのシステムファイルを編集する必要もないため、煩わしさがありません。 Rubyをインストールして、コマンドラインからRubyプログラムを呼び出せるようにする必要があります。現在、PerlスクリプトまたはGilCCの2つのオプションがあり、Rubyを使用する場合は、GilCCが好きです。

次に、「GillCC」を呼び出すと、「クリーン」、「デバッグ」、「リリース」などのパラメータを使用して、舞台裏で「メイク」が呼び出されます。たとえば、通常「make debug」を呼び出す場合、「GilCC debug」を呼び出す必要があります。

GilCCには、警告とエラーの数やビルド時間などの統計情報があることをほとんど忘れていました。これらは、ビルドを改善しようとするときに便利です。

ダウンロードページへのリンクは here です。

0
Gilson