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

Я искал в руководствах по gcc, cat, tail и head команду типа --reverse без результатов. Итак, я хотел бы программу, которая печатает стандартный ввод в обратном порядке. Кто-нибудь знает что-то подобное?

2
JoseLinares 19 Дек 2016 в 15:53
Вы пробовали tac? Примерно так должно работать: gcc main.c 2>&1 | tac (обратите внимание, что 2>&1 необходим, потому что gcc отображает свои сообщения об ошибках в stderr) EDIT : это будет отображать точную обратную сообщение и не будет соответствовать блочной структуре gcc. Не могли бы вы расширить свой вопрос, если это не то поведение, которое вы ищете?
 – 
Aserre
19 Дек 2016 в 16:05
Да, что-то подобное - это то, что я ищу, он не сохраняет структуру, но его можно отлаживать немного быстрее. Но теперь он не отображает цвета.
 – 
JoseLinares
19 Дек 2016 в 16:15

1 ответ

Лучший ответ

Вы можете попробовать следующий сценарий:

unbuffer gcc main.c 2>&1 | tac

Пояснение:

  • unbuffer: отключает буферизацию для канала и позволяет gcc сохранять свою цветовую схему во время выполнения.
  • gcc main.c 2>&1:
    • Длина вашей команды gcc может быть сколь угодно длинной, и она может содержать все файлы, которые вы обычно используете (не ограничивается одним файлом. Просто оставьте перенаправление в качестве последнего параметра).
    • 2>&1: перенаправление ввода-вывода. stderr перенаправляется на stdout
  • tac: та же команда, что и cat, но выводит объединенный результат в обратном порядке.

Если он не установлен на вашем компьютере, unbuffer находится в пакете expect-dev в дистрибутивах на основе Debian, а tac является частью coreutils.

3
Aserre 19 Дек 2016 в 16:25
Именно то, что я ищу, спасибо, @Aserre. В Fedora пакет называется expect-devel.
 – 
JoseLinares
19 Дек 2016 в 21:28
К сожалению, этот трюк не работает на clang.
 – 
Sapphire_Brick
9 Фев 2021 в 07:46
Вы случайно не используете clang под псевдонимом? Если да, я рекомендую вам прочитать этот ответ
 – 
Aserre
9 Фев 2021 в 12:04
Нет, я не использую псевдоним. То есть на clang-11 я получаю 2 errors generated. `^` int main() { test.c:3:12: note: to match this '{' ^ } и т. Д.
 – 
Sapphire_Brick
10 Фев 2021 в 06:29
Другими словами, я получаю сообщения об ошибках с неправильными линиями и неправильными цветами на clang-11.
 – 
Sapphire_Brick
10 Фев 2021 в 06:35