コマンドラインで読み取り可能なgccエラーと警告出力を取得する方法はありますか?

2009年03月18日に質問されました。  ·  閲覧回数 12.9k回  ·  ソース

mikeh picture
2009年03月18日

いくつかの長いエラーの場合、gcc出力は密で、多くの行の折り返しなどがあります。特にエラーが微妙な場合は、目で解析するのに10〜30秒かかることがあります。

これを開いているコードエディタウィンドウに貼り付けて、基本的な構文の強調表示を取得し、正規表現を使用した再フォーマットを可能にしました。

より自動化された方法を発明した人はいますか?

回答

Paul Fultz II picture
2013年03月15日
16

私はcolorizeと呼ばれるこのスクリプトを使用します:

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

それから私はそれをこのように呼びます(makeまたは他のビルドシステムを使用して):

make |& colorize

そして、clangに似たカラー出力が得られます。

Mr Fooz picture
2009年03月18日
14

colorgccは非常に貴重であることがわかりました。 カラーリングを導入することにより、特にテンプレートが関係している場合に、gccエラーメッセージのテキストを精神的に解析することがはるかに簡単になります。

Michael Burr picture
2009年03月18日
9

エラーがテンプレートに関連している場合は、STLfiltを確認してください。

migou picture
2010年10月27日
7

gccfilterは、メッセージの色付けと簡略化を行います。

http://www.mixtion.org/gccfilter/

Tong Zhou picture
2015年11月08日
3

diagccをチェックしてください、あなたはこのようなものを得ることができます:

colored message demo

gcc≥4.9の場合、引数-fdiagnostics-color=always使用できます。

Martin Ueding picture
2016年11月28日
3

GCC 4.9を使用している場合は、追加のコンパイルフラグとして-fdiagnostics-color=autoを追加できます。 それ以降のバージョンでは、色はデフォルトで有効になっています。

ulidtko picture
2013年03月28日
2

4年後のあなたの質問に答えるために、ここでclangについて言及する必要があります。

arr_sea picture
2013年04月23日
0

これが私の現在のハックです。これは主に、戦略的な場所に改行とインデントを少し余分な注釈とともに挿入しますが、STLの冗長性に対処するためには何もしません。

現在実装されているように、コンパイラがエラーを返した場合、このスクリプトはエラーを返さないため、次のようなことを行うと正しく機能しないことに注意してください: (make && ./runApplication) 。 これは、bash-fuが優れている人によって確実に修正される可能性があります。

#!/bin/bash
# SUBSTITUTION RULES:
# Note: All substitution rules must end in a semi-colon, inside of the closing quote
subColonSpace='s/: /:\n /g;'
subSrc='s/^src/\nsrc/;'
subError='s/error:/error:\n\n======================================\nERROR:/;'
subWarning='s/ *error: *\n/ERROR: /;'
subWarning='s/ *warning: *\n/WARNING: /;'
subNote='s/note:/\n NOTE:/g;'
subOpenTic='s/‘/\n   ‘/g;'
subOpenParen='s/(/(\n      /g; s/(\n *)/()/g;'
subCommaSpace='s/, /,\n      /g;'

# Note: The order of these may matter
sedExpr="$subColonSpace $subSrc $subError $subWarning $subNote $subOpenTic      
$subOpenParen $subCommaSpace"

makelogFile=makelog.tmp

make "[email protected]" 2>&1 | sed "$sedExpr" | tee $makelogFile
Gilson picture
2014年01月23日
0

Rubyが好きなら、 GilCCがありGilCCには、警告数やエラー、コンパイル時間などの統計があります。 .bashファイルをいじる必要はなく、マシンでRubyを実行できる限り、クロスプラットフォームです。 Rubyの力があるので; ビルドが成功した後、GilCCにトリガーテストの自動化、単体テスト、外部ハードウェアのプログラムなど、さまざまなことを実行させることができます。

ダウンロードページへのリンクは次のとおりです: http