24

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

我已经把它粘贴到一个打开的代码编辑器窗口中,以获得一些基本的语法突出显示并启用正则表达式的重新格式化。

有没有人发明了一种更自动化的方法?

4

9 回答 9

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的颜色输出。

于 2013-03-15T06:43:39.980 回答
14

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

于 2009-03-17T23:43:34.847 回答
9

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

于 2009-03-17T23:32:01.130 回答
7

gccfilter 对消息进行着色和简化。

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

于 2010-10-27T13:23:45.683 回答
3

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

彩色消息演示

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

于 2015-11-08T01:14:12.383 回答
3

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

于 2016-11-28T14:34:34.613 回答
2

4年后回答你的问题,这里应该提到clang 。

于 2013-03-28T10:19:43.020 回答
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
于 2013-04-22T18:52:09.720 回答
0

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

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

于 2014-01-23T15:19:07.993 回答