改善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落
- 实际上,不是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时,这些东西是方便的。
下载页面的链接在这里 。
- 以编程方式获取C#堆栈跟踪
- “ClickOnce不支持请求执行级别requireAdministrator”。
- 有没有更好的方法来修剪date时间到一个特定的精度?
- 是“long long”=“long long int”=“long int long”=“int long long”?
- 是'浮动a = 3.0;' 一个正确的说法?
- 有没有类似jQuery的CSS / HTMLselect器可以在C#中使用?
- 为什么f(i = -1,i = -1)未定义的行为?
- .NET库中是否有预定义的月份枚举?
- 实体对象不能被IEntityChangeTracker的多个实例引用。 同时在entity framework4.1中添加相关对象到实体