改善g ++输出

g ++有时产生相当复杂的输出。 特别是在处理模板时。 有什么工具可以使g ++输出更具可读性吗? …至less有一些颜色?

在这里提出这个问题可能听起来很愚蠢,但是我一直无法通过我的方式来解决这个问题。

如果您可以自由切换编译器,请尝试使用clang ++ 。 这是错误的输出大部分是非常清楚的,有时甚至会告诉你如何解决你的错误。 你可以在这里findgcc vs clang错误输出的比较: http : //clang.llvm.org/diagnostics.html 。

否则,正如Matteo Italia所指出的,请看STLFilt 。

对于颜色方面,Edwin Buck的解决scheme( colorgcc )非常好。 您可以创build名称为gcc,g ++等的符号链接,以便每当您运行编译器命令(只要您正确设置了colorgcc脚本中的path)就可以使用它。 从Makefile中编译一些大的项目时,我觉得这很方便。 极大地帮助检测出错的地方(特别是当你用make -j进行并行编译时)。

GCC自4.9起着色输出☺

将以下内容添加到您的bashrc / zshrc / whatever中。

 export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' 

有colorgcc ,一个perl脚本,用颜色包装gcc(g ++)输出,以方便阅读。

至于gcc(g ++)的“输出”我猜你不会抱怨已编译的二进制文件:)

我通过使用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/" 

在处理STL 1时 , STLFilt来救援。

在一个相关的说明中,我也听说铛编译器本身产生了更好的错误信息。


Nitpickers的angular落

  1. 实际上,不是SGI STL,而是C ++标准采用的标准库中的一部分。

如果你使用gcc 4.9或更高版本,有几个内置选项:

  • -fmessage-length = n,它优化了n个字符长度的行的输出。
  • -fdiagnostics-color = always,它应用了一些漂亮的颜色。
    (在linux上运行良好,msys上没有这么多)

有关更多选项和确切用法,请参阅文档:
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html

我不能直接回答你的问题,但是请注意,关于模板,如果你看最上面的消息(由模板引起的错误)和底部“从这里实例化”的消息,通常会变得更加清晰。 忽略所有的中间消息,因为他们可能不会帮助。

有colorgcc 。

有我的个人function:

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

你可以使用GilCC ,这是一个Ruby工具,可以将GCC输出转换成实时的颜色。 它是免费的,您可以根据自己的喜好进行定制。 这是不侵入的,因为它不会改变你的gcc设置,你不必编辑任何系统文件,如.bash。 您必须安装Ruby并能够从命令行调用Ruby程序。 现在你有两个selectPerl脚本或GilCC ,如果你使用Ruby,你会喜欢GilCC。

然后,无论何时调用“GillCC”,都会使用“clean”,“debug”或“release”等参数在幕后调用“make”。 例如,如果你通常调用:“make debug”,你应该调用“GilCC debug”。

几乎忘了提及, GilCC有一些统计,如警告和错误#以及build设时间。 当你试图改善你的构build时,这些东西是方便的。

下载页面的链接在这里 。