有没有办法在命令行中获取可读的gcc错误和警告输出?

时间:2009-03-17 23:27:02

标签: c++ c gcc gcc-warning

对于一些长时间的错误,gcc输出是密集的并且有很多换行等。特别是当错误很微妙时,我可能需要10-30秒的眯眼才能用眼睛解析它。

我已经开始在一个开放的代码编辑器窗口中粘贴它,以获得一些基本的语法突出显示并启用regex的重新格式化。

有没有人发明过更自动化的方法?

9 个答案:

答案 0 :(得分: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相似。

答案 1 :(得分:14)

我发现colorgcc非常宝贵。通过引入着色,在精神上解析gcc错误消息的文本变得更加容易,尤其是涉及模板时。

答案 2 :(得分:9)

如果您的错误与模板有关,请查看STLfilt:

答案 3 :(得分:7)

gccfilter做着色&简化消息。

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

答案 4 :(得分:3)

检查diagcc,你可以得到这样的东西:

colored message demo

如果你的gcc≥4.9,你可以使用参数-fdiagnostics-color=always

答案 5 :(得分:2)

要在4年后回答您的问题,请在此处提及clang

答案 6 :(得分:2)

如果您使用GCC 4.9,则可以添加-fdiagnostics-color=auto作为附加编译标记。在某些更高版本中,默认情况下已启用颜色。

答案 7 :(得分:0)

这是我当前的hack,它主要在战略位置插入换行符和缩进以及一些额外的注释,但没有解决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 "$@" 2>&1 | sed "$sedExpr" | tee $makelogFile

答案 8 :(得分:0)

如果您喜欢Ruby,则 GilCC ! GilCC非常容易安装(只需将其复制到bin文件夹)并且易于使用(只需键入GilCC而不是“gcc”或“make”),它可以与GCC版本一起使用。与基于Perl的脚本不同, GilCC 具有诸如警告#和错误以及编译时间之类的统计信息。你不必乱用.bash文件,只要你可以在你的机器上运行Ruby,它就是跨平台的。因为它具有Ruby的强大功能;您可以让GilCC在成功构建后执行不同的操作,例如触发测试自动化,单元测试或程序外部硬件。

以下是下载页面的链接:http://www.onlysolutionssoftware.com/gilcc/