Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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'

Ответ 3

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

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

Ответ 4

Я улучшаю его, используя sed для цветного вывода с этим script:

#!/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/"

Ответ 5

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

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


Угол Нитпикерса
  • Собственно, не SGI STL, а его части, которые были приняты в стандарте С++ и являются частью стандартной библиотеки.

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

Затем, когда вы вызываете "GillCC", он будет вызывать "заставку" за кулисами с вашими параметрами, такими как "clean", "debug" или "release". например, если вы обычно вызываете: "make debug", вы должны вызвать "отладка GilCC".

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

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