Есть ли способ получить читабельный вывод ошибок и предупреждений gcc в командной строке? - PullRequest
24 голосов
/ 18 марта 2009

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

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

Кто-нибудь изобрел более автоматизированный метод?

Ответы [ 9 ]

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

Я использую этот скрипт, который называется 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

И я получаю вывод цвета, похожий на лязг.

14 голосов
/ 18 марта 2009

Я нашел colorgcc бесценным. Благодаря введению раскраски становится намного проще мысленно анализировать текст сообщений об ошибках gcc, особенно когда используются шаблоны.

9 голосов
/ 18 марта 2009

Если ваши ошибки связаны с шаблоном, взгляните на STLfilt:

7 голосов
/ 27 октября 2010

gccfilter делает раскраску и упрощение сообщений.

http://www.mixtion.org/gccfilter/

3 голосов
/ 08 ноября 2015

отметьте diagcc , вы можете получить что-то вроде этого:

colored message demo

Если ваш gcc ≥ 4.9, вы можете использовать аргумент -fdiagnostics-color=always.

2 голосов
/ 28 ноября 2016

Если вы используете GCC 4.9, вы можете добавить -fdiagnostics-color=auto в качестве дополнительного флага компиляции. В некоторых более поздних версиях цвет был включен по умолчанию.

2 голосов
/ 28 марта 2013

Чтобы ответить на ваш вопрос 4 года спустя, здесь следует упомянуть лязг .

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

если вам нравится Ruby, то есть GilCC ! GilCC очень прост в установке (просто скопируйте его в папку bin) и прост в использовании (просто введите GilCC вместо «gcc» или «make»), и он работает с версией GCC. В отличие от сценариев на основе Perl GilCC имеет такую ​​статистику, как количество предупреждений и ошибок и время компиляции. Вам не нужно связываться с файлами .bash, и это кросс-платформенный процесс, если вы можете запустить Ruby на своем компьютере. Так как он обладает силой Рубина; после успешной сборки вы можете заставить GilCC выполнять различные действия, такие как автоматизация триггерного тестирования, модульное тестирование или программирование внешнего оборудования.

Вот ссылка на страницу загрузки: http://www.onlysolutionssoftware.com/gilcc/

0 голосов
/ 22 апреля 2013

Вот мой текущий хак, который в основном вставляет новые строки и отступы в стратегических местах вместе с небольшой дополнительной аннотацией, но ничего не делает для устранения многословия STL.

Обратите внимание, что в настоящее время этот скрипт не возвращает ошибку, если компилятор вернул ее, поэтому выполнение чего-то подобного не будет работать должным образом: (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 "$@" 2>&1 | sed "$sedExpr" | tee $makelogFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...