Есть ли способ получить читаемую gcc-ошибку и вывод предупреждений в командной строке?
Для некоторых длинных ошибок выход gcc плотен и имеет много линий и т.д. Особенно, когда ошибки тонкие, мне может потребоваться 10-30 секунд, чтобы прищурить его глазами.
Я начал вставлять это в открытое окно редактора кода, чтобы получить подсветку основного синтаксиса и включить переформатирование с помощью регулярных выражений.
Кто-нибудь придумал более автоматический метод?
Ответы
Ответ 1
Я использую этот script, называемый colorize
:
#!/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/"
Затем я просто назову это так (используя make или любую систему сборки):
make |& colorize
И я получаю цветовой выход, похожий на clang.
Ответ 2
Я нашел colorgcc бесценным. Внедряя окраску, становится намного легче мысленно анализировать текст сообщений об ошибках gcc, особенно когда задействованы шаблоны.
Ответ 3
Если ваши ошибки связаны с шаблоном, посмотрите STLfilt:
Ответ 4
gccfilter делает раскраску и упрощение сообщений.
http://www.mixtion.org/gccfilter/
Ответ 5
проверьте diagcc, вы можете получить что-то вроде этого:
![colored message demo]()
Если ваш gcc ≥ 4.9, вы можете использовать аргумент -fdiagnostics-color=always
.
Ответ 6
Чтобы ответить на ваш вопрос через 4 года, clang следует упомянуть здесь.
Ответ 7
Если вы используете GCC 4.9, вы можете добавить -fdiagnostics-color=auto
в качестве дополнительного флага компиляции. В более поздней версии цвет по умолчанию включен.
Ответ 8
Здесь мой текущий хак, который в основном вставляет новые строки и отступы в стратегических местах вместе с небольшой дополнительной аннотацией, но не делает ничего, чтобы адресовать многословность STL.
Обратите внимание, что в настоящее время этот script не возвращает ошибку, если компилятор вернул ее, поэтому выполнение чего-то подобного не будет работать должным образом: (make && ./runApplication)
. Это, безусловно, может быть исправлено кем-то с лучшим bash -fu.
#!/bin/bash
# SUBSTITUTION RULES:
# Note: All substitution rules must end in a semi-colon, inside of the closing quote
subColonSpace='s/: /:\n /g;'
subSrc='s/^src/\nsrc/;'
subError='s/error:/error:\n\n======================================\nERROR:/;'
subWarning='s/ *error: *\n/ERROR: /;'
subWarning='s/ *warning: *\n/WARNING: /;'
subNote='s/note:/\n NOTE:/g;'
subOpenTic='s/‘/\n ‘/g;'
subOpenParen='s/(/(\n /g; s/(\n *)/()/g;'
subCommaSpace='s/, /,\n /g;'
# Note: The order of these may matter
sedExpr="$subColonSpace $subSrc $subError $subWarning $subNote $subOpenTic
$subOpenParen $subCommaSpace"
makelogFile=makelog.tmp
make "[email protected]" 2>&1 | sed "$sedExpr" | tee $makelogFile
Ответ 9
если вам нравится Ruby, GilCC! GilCC очень прост в установке (просто скопируйте его в папку bin) и прост в использовании (просто введите GilCC вместо "gcc" или "make" ), и он работает с версией GCC. В отличие от сценариев на основе Perl GilCC имеет статистику, такую как количество предупреждений и ошибок и время компиляции. Вам не нужно возиться с файлами .bash, и это кросс-платформа, пока вы можете запускать Ruby на вашем компьютере. Так как он обладает мощью Ruby; вы можете заставить GilCC выполнять различные функции, такие как автоматизация триггеров тестирования, unit test или программное внешнее оборудование после успешной сборки.
Вот ссылка на страницу загрузки: http://www.onlysolutionssoftware.com/gilcc/