对于一些长错误,gcc 输出很密集并且有很多换行等。特别是当错误很细微时,我可能需要 10-30 秒的眯眼才能用我的眼睛解析它。
我已经把它粘贴到一个打开的代码编辑器窗口中,以获得一些基本的语法突出显示并启用正则表达式的重新格式化。
有没有人发明了一种更自动化的方法?
对于一些长错误,gcc 输出很密集并且有很多换行等。特别是当错误很细微时,我可能需要 10-30 秒的眯眼才能用我的眼睛解析它。
我已经把它粘贴到一个打开的代码编辑器窗口中,以获得一些基本的语法突出显示并启用正则表达式的重新格式化。
有没有人发明了一种更自动化的方法?
我使用这个脚本,称为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的颜色输出。
我发现colorgcc是无价的。通过引入着色,精神上解析 gcc 错误消息的文本变得更加容易,尤其是在涉及模板时。
如果您的错误与模板相关,请查看 STLfilt:
gccfilter 对消息进行着色和简化。
检查diagcc,你可以得到这样的东西:
如果你的 gcc ≥ 4.9,你可以使用 argument -fdiagnostics-color=always
。
如果您使用 GCC 4.9,您可以添加-fdiagnostics-color=auto
作为附加编译标志。在某些更高版本中,默认情况下已启用颜色。
4年后回答你的问题,这里应该提到clang 。
这是我当前的 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
如果你喜欢 Ruby 有GilCC!GilCC 非常易于安装(只需将其复制到 bin 文件夹中)且易于使用(只需键入 GilCC 而不是“gcc”或“make”)并且它适用于 GCC 版本。与基于 Perl 的脚本不同, GilCC具有诸如警告数和错误数以及编译时间等统计信息。你不必弄乱 .bash 文件,只要你能在你的机器上运行 Ruby,它就是跨平台的。由于它具有 Ruby 的强大功能;您可以让 GilCC 在成功构建后执行不同的操作,例如触发测试自动化、单元测试或对外部硬件进行编程。