改善g ++输出

时间:2011-04-20 15:08:52

标签: c++ g++

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

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

10 个答案:

答案 0 :(得分:40)

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'

答案 1 :(得分:35)

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

否则,如Matteo Italia所述,请查看STLFilt

对于色彩方面,Edwin Buck的解决方案(colorgcc)非常好。您可以为它创建名为gcc,g ++等的符号链接,以便在运行编译器命令时始终使用它(如果您正确设置了colorgcc脚本中的路径)。从Makefile编译一些大型项目时,我发现这特别方便。有助于检测出现错误的位置(特别是在使用make -j进行并行编译时)。

答案 2 :(得分:12)

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

就gcc(g ++)的“输出”而言,我猜你不是在抱怨已编译的二进制文件:)

答案 3 :(得分:10)

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

答案 4 :(得分:6)

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

      
  • -fmessage-length = n,用于优化n个字符长度的行的输出。
  •   
  • -fdiagnostics-color = always,它应用了一些漂亮的颜色。
    (在linux上工作正常,而不是在msys上工作)

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

答案 5 :(得分:3)

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

在相关的说明中,我还听说clang编译器通常会产生更好的错误消息。

<小时/> Nitpickers'角落

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

答案 6 :(得分:2)

我无法直接回答您的问题,但请注意,对于模板,如果查看顶部消息(由模板化引起的错误)和底部“从此处实例化”消息,通常会变得更加清晰。忽略所有中间消息,因为它们可能无法提供帮助。

答案 7 :(得分:1)

colorgcc

答案 8 :(得分:1)

有我的个人功能:

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

答案 9 :(得分:0)

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

然后,无论何时调用“GillCC”,它都将使用您的参数调用“make”,例如“clean”,“debug”或“release”。例如,如果通常你打电话:“make debug”你应该调用“GilCC debug”。

几乎忘了提到 GilCC 有一些统计数据,例如#警告和错误以及构建时间。当你试图改善你的构建时,这些东西都很方便。

下载页面的链接是here