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

Есть ли способ получить читаемую gcc-ошибку и вывод предупреждений в командной строке?

Для некоторых длинных ошибок выход gcc плотен и имеет много линий и т.д. Особенно, когда ошибки тонкие, мне может потребоваться 10-30 секунд, чтобы прищурить его глазами.

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

Кто-нибудь придумал более автоматический метод?

4b9b3361

Ответ 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, особенно когда задействованы шаблоны.

Ответ 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/