Улучшение вывода g ++ - PullRequest
       6

Улучшение вывода g ++

42 голосов
/ 20 апреля 2011

g ++ иногда дает довольно запутанные результаты. Особенно при работе с шаблонами. Есть ли инструмент, который делает вывод g ++ более читабельным? ... хоть какой-нибудь цвет?

Может показаться глупым задавать этот вопрос здесь, но я не смог найти выход из положения.

Ответы [ 10 ]

40 голосов
/ 27 октября 2013

GCC с 4.9 имеет цветной вывод ☺

Добавьте следующее к вашему bashrc / zshrc / чем угодно.

36 голосов
/ 20 апреля 2011

Если вы можете переключать компилятор, попробуйте clang ++ .Его вывод ошибок в большинстве случаев очень ясен, а иногда он даже скажет вам, что делать, чтобы исправить вашу ошибку.Вы можете найти сравнение вывода ошибок gcc и clang здесь: http://clang.llvm.org/diagnostics.html.

В противном случае, как отмечает Matteo Italia, посмотрите STLFilt .

Цветовой аспектРешение Эдвина Бака ( colorgcc ) очень хорошее.Вы можете создавать символические ссылки на него с именами gcc, g ++ и т. Д., Чтобы они всегда использовались при каждом запуске команды компилятора (при условии, что вы правильно установили пути в сценарии colorgcc).Я нахожу это особенно удобным при компиляции большого проекта из Makefile.Очень помогает обнаружить, где именно что-то пошло не так (особенно когда вы выполняете параллельные компиляции с make -j).

12 голосов
/ 20 апреля 2011

Существует colorgcc , скрипт на Perl, который оборачивает вывод gcc (g ++) цветом для удобства чтения.

Что касается "вывода" gcc (g ++), я предполагаю, что вы не жалуетесь на скомпилированные двоичные файлы:)

10 голосов
/ 15 марта 2013

Я улучшаю его, используя 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/"
6 голосов
/ 18 февраля 2016

Если вы используете gcc 4.9 или выше, есть пара встроенных опций:

  • -fmessage-length = n, что оптимизирует вывод для строк длиной n символов.
  • -fdiagnostics-color = всегда, который применяет некоторые приятные цвета.
    (отлично работает на linux, не так много на msys)

Дополнительные параметры и точное использование приведены в документации:
https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html

3 голосов
/ 20 апреля 2011

При работе с STL 1 , STLFilt приходит на помощь.

Относительно примечания я также слышал, что компилятор clang производит многолучше сообщения об ошибках в целом.

Уголок Nitpickers

  1. На самом деле, не SGI STL, а его части, которые были приняты в стандарте C ++ и являются частью стандартабиблиотека.
2 голосов
/ 20 апреля 2011

Я не могу ответить на ваш вопрос напрямую, но учтите, что в отношении шаблонов, если вы посмотрите на верхнее сообщение (ошибка, вызванную шаблонным сообщением) и нижнее сообщение «экземпляр отсюда», оно обычно становится намного более понятным , Игнорируйте все промежуточные сообщения, поскольку они, вероятно, не помогут.

1 голос
/ 12 марта 2013

есть моя личная функция:

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; '
}
1 голос
/ 20 апреля 2011

Существует colorgcc .

0 голосов
/ 20 января 2014

вы можете использовать GilCC , который является инструментом Ruby, который преобразует вывод GCC в цвет в режиме реального времени. Это бесплатно, и вы можете настроить его по своему вкусу. Это не навязчиво, так как не меняет настройки gcc и вам не нужно редактировать системные файлы, такие как .bash. Вы должны установить Ruby и иметь возможность вызывать программы Ruby из командной строки. Прямо сейчас у вас есть два варианта сценария Perl или GilCC , и если вы работаете с Ruby, вам понравится GilCC.

Тогда всякий раз, когда вы вызываете «GillCC», он будет вызывать «make» за кулисами с вашими параметрами, такими как «clean», «debug» или «release». например, если вы обычно вызываете «make debug», вы должны вызывать «GilCC debug».

Почти забыл упомянуть, что GilCC имеет некоторую статистику, такую ​​как # предупреждений и ошибок, а также время сборки. Эти вещи удобны, когда вы пытаетесь улучшить свою сборку.

Ссылка на страницу загрузки здесь .

...