Улучшение вывода g++
g++ иногда производит довольно запутанные выходы. Специально при работе с шаблонами. Есть ли какой-нибудь инструмент, который делает вывод g++ более удобочитаемым?... по крайней мере какой-то цвет?
Может показаться глупым задавать этот вопрос здесь, но я не смог выйти из этого пути.
Ответы
Ответ 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 имеет некоторую статистику, такую как # предупреждений и ошибок, а также время сборки. Эти вещи удобны, когда вы пытаетесь улучшить свою сборку.
Ссылка на страницу загрузки здесь.