В любой среде разработки есть инструмент с названием «Output». Нет нужды описывать что он делает, поскольку абсолютно все разработчики его используют в своей работе ежедневно. Он прост и консервативен.

По сути не менялся десятилетиями и до этих пор выглядит как то так:


Текст, текст и еще раз текст. Много текста...

Даже в этом крошечном примере не сразу видно где строка с ошибкой. Для того чтобы это понять, нужно приложить усилия и потратить время. Просто потому что нужно читать текст и искать в нем слова “error”, “exception” или “warning”. Программисту искать, а заказчику платить за потраченное на это время.

Решение вопроса


Что если подсветить текст в таких сообщениях красным, а в случае с предупреждениями — желтым? Будет лучше. Так подумали авторы расширений VSColorOutput и Output Enhancer для Visual Studio (далее, для иллюстрации, будет использоваться эта IDE).

Получилось вот так:


Ошибки и предупреждения стали заметны без усилий со стороны разработчиков.
Отличная работа и благодарность за удобный инструмент.


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

Например, зачем видеть список компилируемых файлов? Можно ли как то это спрятать?
Такой вопрос задал себе автор расширения Output Window Filter

Получилось вот так:


Результат стал меньше, разбираться с ним стало проще. К реализации есть вопросы, но идея замечательная.

Разработчики Microsoft также внесли свой вклад в эволюцию этого инструмента добавив в него временные метки. Для этого они создали расширение Time Stamp Margin.

Получилось следующее:


Стало удобнее. Теперь понятно когда и что выполнялось, а также сколько времени прошло между событиями.

Нерешенные проблемы


Все прекрасно, но есть проблема.

Эти замечательные расширения не могут работать совместно, дополняя достоинства друг друга. А более печально то, что на этом прогресс в готовых решениях остановился, оставив нерешенным ряд проблем.

Вот приблизительный список этих проблем:

1. Вместе с полезной информацией отображается и служебная;



2. Нет никакой визуализации однотипных сообщений;



3. Нет возможности искать и подсвечивать интересующие данные;

4. Не очевидно с каких сообщений возможен переход на исходный код;

5. Нет возможности быстро перейти к описанию ошибки;

6. При много-проектной компиляции не очевидно к какому проекту относятся сообщения;



7. Для длинных сообщений приходится использовать горизонтальный скролинг;

8. Отображение стек-трейса никак не оптимизировано;

9. Отсутствует возможность маскировки сообщений по типам (ошибки, предупреждения, сообщения).

Итоги


Не трудно заметить, что прогресса в улучшении данного инструмента давно не наблюдается. Десятилетиями важнейший инструмент остается неизменным, и лишь отдельные энтузиасты пытаются что то улучшить. Это и стало причиной появления расширения MetaProject. В нем сделана попытка решить все указанные выше проблемы.

Что из этого получилось, можно посмотреть на примере:



Заключение


Не игнорируйте расширения к среде разработки. Там могут быть очень полезные инструменты, которые сберегут разработчикам огромное количество времени, а заказчикам много денег.
Тем более что практически все эти расширения абсолютно бесплатны.

Комментарии (44)


  1. u_235
    13.06.2019 16:38

    То есть программисту лень вставить время при выводе сообщений в консоль и эту проблему решает расширение для IDE? А на стороне клиента это как поможет?


    1. viacheslav-lozinskyi Автор
      13.06.2019 16:49

      В этом расширении фиксируется время появления данной строки в IDE. Точно также как и в соответствующем аналоге от Microsoft. Эти временные метки нужны чтобы можно было понять время между двумя событиями.
      Ну, например, сколько времени прошло между запросом на сервер и откликом.


    1. Punk_Joker
      13.06.2019 18:35

      это насколько я понял временные метки операций сборки


      1. viacheslav-lozinskyi Автор
        13.06.2019 19:11

        В «Time Stamp Margin» метки отображаются только в режиме Debug, в «MetaProject» во всех режимах.


  1. VioletGiraffe
    13.06.2019 17:10

    Чтобы легко и просто видеть ошибки, есть View -> Error list.


    1. viacheslav-lozinskyi Автор
      13.06.2019 17:17

      По факту MetaProject конкурирует с «Output» + «Error list» + «VSColorOutput» + «Output Window Filter» + «Time Stamp Margin», и успешно их заменяет. И не только их. Можете это проверить и в этом убедиться.


  1. alex_zzzz
    13.06.2019 17:27

    Можно ли как-нибудь так закрыть окно Output, чтобы оно больше никогда само не открывалось? Толку от него ноль. Надоедает периодически закрывать.


    1. yatagarasu
      13.06.2019 17:33

      Options -> Project and Solutions -> General -> Show Output…

      Толку от него ноль.

      Странно, самое полезное окно же )


  1. perfect_genius
    13.06.2019 20:56

    А нельзя ли вообще обойтись без этого окна и перемещаться по коду, например, по указателям на места с ошибками?


    1. viacheslav-lozinskyi Автор
      13.06.2019 21:15

      «Output» в любой среде разработки создавался как агрегатор всех сообщений. Логи в работающей программе тоже при желании можно перенаправить в этот инструмент. Для этого Windows разработчикам достаточно вызвать OutputDebugString(...) или System.Diagnostics.Debug.WriteLine(...). Т.е. это не только средство для показа ошибок и предупреждений. Это гораздо гораздо более сложная вещь. Даже в самой простой реализации…


    1. viacheslav-lozinskyi Автор
      14.06.2019 07:42

      Кстати, если у Вас есть идеи как можно обойтись вообще без «Output», я с удовольствием их выслушаю. Если эти идеи жизнеспособны, готов их даже реализовать.


      1. perfect_genius
        14.06.2019 08:04

        Сейчас подумал и дошло, что обычно приходится прокручивать этот список когда пропускаю закрывающую скобку или там тип выставил неправильный. А если программу запустил, а она вываливается с ошибкой — Visual Studio приводит и указывает прямо на место в коде. Хотелось, чтобы любые баги приводило сразу на нужное место, но ведь со скобками это не определить. Так что не мешает и идей нет :)


        1. viacheslav-lozinskyi Автор
          14.06.2019 08:09

          Понятно :)


  1. 4e1
    14.06.2019 09:38

    вы зациклились только на одной IDE (имхо — не самой лучшей)
    для примера QtCreator — сама вкладка «Compile output» выводит ошибки красным тескстом, также имеется возможность сделать поиск по тексту выхлопа компиляции нажав Ctrl+F, также есть отдельно вкладка Issues, где будут отображаться только ошибки/варнинги с минимумом лишней информации


    1. viacheslav-lozinskyi Автор
      14.06.2019 10:03

      Я не зациклился на Visual Studio, я с нее начал. Это разные вещи.


    1. DirectoriX
      14.06.2019 11:19

      На самом деле в Qt Creator'е цветной вывод сборки при использовании GCC, а если использовать MS VC, то вывод такой же унылый одноцветный.
      Вероятно, это связано с использованием make


  1. tangro
    14.06.2019 10:50

    А что это такое? Зачем расширение при установке тащит IncrediBuild?


    1. viacheslav-lozinskyi Автор
      14.06.2019 10:53

      Это стандартный инсталятор Visual Studio. Почему он пишет эту строчку я не знаю. Сам удивлен. Никакого Incredibuild по факту не ставится. Можете проверить.


      1. tangro
        14.06.2019 10:54

        Проверил. Ставится. Появляется билд-агент в трее и меню IncrediBuild в студии.


        1. viacheslav-lozinskyi Автор
          14.06.2019 11:05

          Вы меня озадачили. Только что снес расширение и поставил его заново. Все снеслось и установилось. Нет вообще даже намека на «Incredibuild», ни в инсталяторе, ни в IDE.


        1. viacheslav-lozinskyi Автор
          14.06.2019 11:59

          Возможно проблема в «Incredibuild»? Вы не пробовали проверить, его вообще можно деинсталировать?


          1. tangro
            14.06.2019 15:50

            Можно, конечно. Но это ни на что не влияет.


  1. tangro
    14.06.2019 10:53

    Не заработало, к сожалению:


    1. viacheslav-lozinskyi Автор
      14.06.2019 11:28

      По скринам видно, что расширение у Вас не установилось.


  1. truthfinder
    14.06.2019 12:01

    Нет перехода по клику на проблемное место. Или я что-то делал не так? Приходится снова искать ошибку в стандартном Output и кликать на неё, чтобы перейти куда надо. В общем не допилен инструмент. Хотя задумка хорошая. И вот эта иконка винды слева и пространство под ней. Вы серъёзно? Ну нафига? Кто дизайнил? Хочется сильно ругаться. Место занимает полезное только.


    1. viacheslav-lozinskyi Автор
      14.06.2019 12:03

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


      1. truthfinder
        14.06.2019 12:05

        — Я не вижу стрелочки.
        — Стрелочка это неудобно. В стрелочку надо ещё целиться, мышь вести туда. Это сложнее чем в строчку.


        1. viacheslav-lozinskyi Автор
          14.06.2019 12:07
          +1

          Я добавлю поддержку DblClick для таких случаев на строке (как в стандартном «Output»).


    1. viacheslav-lozinskyi Автор
      14.06.2019 12:19

      Относительно той части которая Вам кажется лишней по дизайну, могу сказать следующее. Это сделано не случайно, и со следующей версии MetaProject будет очевидно, что ничего лучшего чем тот дизайн который Вы видите, не возможно представить. Сейчас конечно это не очевидно, и выглядит бессмысленным.


      1. truthfinder
        14.06.2019 12:47

        Ну раз так, то будем посмотреть.


  1. gasizdat
    14.06.2019 15:24

    Фолдинг сообщений об ошибках в глубоких шаблонных специализациях был бы действительно полезен. Для всего остального есть Error List и его автоматическая синхронизация с Output по выделению.


    1. viacheslav-lozinskyi Автор
      14.06.2019 16:10

      Фолдинг сообщений в MetaProject уже реализован. «Error List» и «Output» можно использовать и после установки расширения, если будет такое желание. Они никуда не деваются.


  1. wunderwaffel
    14.06.2019 15:39

    Из первых впечатлений:
    1. Слишком пёстро на мой вкус. Большинство строк я бы оставил просто серыми — например о том, какой проект куда записал бинарник.
    2. Несколько пикселей от самой нижней строки съедает поле ввода фильтра, в итоге текст обрезан
    3. Хорошо бы эту панельку автоматически открывать при начале сборки как это делает стандартный output
    4. Иконки — привет из 90-х

    Спасибо в любом случае ;)


    1. viacheslav-lozinskyi Автор
      14.06.2019 16:35

      Спасибо за первый мини обзор данного расширения :)
      1. Поддерживаются два режима — первый, когда по умолчанию раскрашивается все, а второй, когда по умолчанию не раскрашивается ничего. Переключаются режимы через выпадающее меню (пункт «Auto colorize»);
      2. Я согласен с Вами, что вертикальный размер более приоритетный, но это тот минимум, в который я могу уместить все что требуется. Речь идет, в том числе, и о дополнительных возможностях, которые появятся в новых версиях;
      3. Вы имеете в виду режим, когда панель прилеплена к кромке, и скрыта?
      4. «Не стреляйте в пианиста, он играет как умеет». Я все таки не дизайнер :)


      1. wunderwaffel
        14.06.2019 16:44

        1. Отключил авто, ничего не изменилось.
        2. Проблема была в том, что самая нижняя строка была обрезана (перекрыта полем ввода) примерно по середине по высоте. Не могу воспроизвести.
        3. Да

        В общем норм тулза, удачи в дальнейших улучшениях!


        1. viacheslav-lozinskyi Автор
          14.06.2019 16:53

          1. При переключении режима, сигнатуры строк (по которым происходит раскраска и маскировка) не сбрасываются. Это изменение относится только к новым строкам, которые еще до этого не показывались.
          2. Ели это так, то это баг. Буду пробовать воспроизвести ситуацию…
          3. В следующей минорной версии это будет сделано.


    1. viacheslav-lozinskyi Автор
      14.06.2019 17:10

      Кстати, цвета или вообще их отсутствие, Вы можете менять по своему желанию. Для этого нужно всего лишь кликнуть на поле где отображается временная метка.


  1. Endeavour
    14.06.2019 15:55

    Возможно ли sysout/sysinput заставить работать через это окно, как, например, в Eclipse?


    1. viacheslav-lozinskyi Автор
      14.06.2019 16:15

      Можно весь вывод перенаправить в это окно если в своей программе сделать вызовы функций OutputDebugString(...) (в С++) или System.Diagnostics.Debug.WriteLine(...) (в .NET). С другой стороны можно подумать как это автоматизировать…


  1. Mikluho
    17.06.2019 00:23

    Имхо, окно вывода называть самым популярным инструментом — перебор.
    Тем более называть эволюцией кастомную раскраску…
    Хотя сама попытка существенно улучшить это окно — хорошая идея.

    Вот есть ли у вас группировка событий в окне вывода при сборке по проектам? Так, чтобы можно было по умолчанию оставить только одну строку с результатом билда, и раскрывать детали по клику?
    Есть возможность одним кликом включать/выключать показ только ошибок, предупреждений?
    А учитываются ли как ошибки неудачные вызовы утилит командной строки?
    А почему нельзя нормально копировать текст, как в обычном окне вывода?
    Настроек нет совсем на столько, что стандартном меню настроек есть только текст лицензии?
    Где нибудь можно почитать описание фич, настроек, планов развития?

    Отвечая на цитату:

    Once you see this extension, you will forget standard output window

    Нет, мне стандартное окошко вывода с имеющимся плагинами удобнее.


    1. viacheslav-lozinskyi Автор
      17.06.2019 00:57

      Не хочу дискутировать относительно того, что является самым популярным инструментом, а что не является… Я, например, не знаю чего то более используемого чем «Output».

      Относительно всего остального, попробую ответить по порядку:
      1. Группировки по проектам нет и не будет. Не вижу в этом смысла.
      2. В будущем будет создан дополнительный инструмент, в котором будет отображаться статус компиляции для всех проектов, и уже в этом окне, для каждого проекта, можно посмотреть его личный лог, в том же дизайне и с теми же возможностями, которые Вы видите сейчас для всех проектов.
      3. Фильтрация ошибок/предупреждений/сообщений будет реализована в следующей минорной версии «1.0.5», вместе с реализацией пожеланий из комментариев выше, и фиксом некоторых багов. Думаю, что сегодня (17.06.2019) это уже будет готово.
      4. Насчет «ошибок командной строки» не понял вопроса. Поясните пожалуйста, что имеется в виду.
      5. Копировать текст, как Вы привыкли, нельзя потому что это не текст. В этом расширении есть одно фундаментальное отличие от всего что сделано до него. Все разработчики «Output» и существующих расширений, делали этот функционал из утверждения, что «Output» — это текст. Я первый, кто стал утверждать что «Output» — это НЕ текст. Кто окажется прав, покажет время.
      6. Настройки появятся для дополнительного функционала, где это будет обосновано. Текущий функционал настроек не требует.
      7. Готовится видео-презентация возможностей расширения.
      8. Относительно планов развития — на фейсбуке сделал группу в которой готов это обсуждать с теми, кто заинтересован в развитии данного проекта. Если Вам это интересно, подписывайтесь.

      Ну и наконец, я не ставлю цель изменить вкусы разработчиков.
      Кто хочет пользоваться чем то другим, пусть пользуется.


      1. Mikluho
        17.06.2019 07:26

        Я, например, не знаю чего то более используемого чем «Output».

        Так уже честнее — этот инструмент популярен у вас лично.
        Ок, тогда вопрос, а какие задачи вы с его помощью решаете? Я иногда ищу там ошибки компиляции, очень редко посматриваю вывод трассировки.

        1. Группировки по проектам нет и не будет. Не вижу в этом смысла.

        А мне кажется удобным по умолчанию видеть при сборке только статус каждого проекта. Остальная портянка только мешает, как бы она не была раскрашена.

        4. Насчет «ошибок командной строки» не понял вопроса. Поясните пожалуйста, что имеется в виду.

        Для сборки некоторых типов проектов студия может вызывать дополнительные команды. Например — вызов nodejs. Вывод этих команд также попадает в окно вывода, а результат билда оценивается по коду возврата этой команды.

        Я первый, кто стал утверждать что «Output» — это НЕ текст. Кто окажется прав, покажет время.

        Сильно утверждение :). Ближе к правде — там не только текст. Но текст более универсален как способ представления. И я знаю способ, как можно совместить дополнительные возможности с текстовым представлением.

        6. Настройки появятся для дополнительного функционала, где это будет обосновано. Текущий функционал настроек не требует.

        Очень сильное утверждение. Вы уверены, что выбранная вами цветовая гамма идеальна?

        7. Готовится видео-презентация возможностей расширения.

        Это хорошо для фэйсбучека, на сайте проекта лучше текстом.

        Ну и наконец, я не ставлю цель изменить вкусы разработчиков.
        Кто хочет пользоваться чем то другим, пусть пользуется.

        И как это соотносится с заглавным утверждением на страничке расширения?


        1. viacheslav-lozinskyi Автор
          17.06.2019 11:23

          Назовите пожалуйста более используемый инструмент чем «Output».

          А мне кажется удобным по умолчанию видеть при сборке только статус каждого проекта. Остальная портянка только мешает, как бы она не была раскрашена.
          Насколько я понимаю, Вы сейчас пользуетесь каким то расширением, которое уже это делает, и возможно делает еще что то крутое? Можно узнать его название?

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

          Вывод этих команд также попадает в окно вывода, а результат билда оценивается по коду возврата этой команды.
          Все что Вы видите в стандартном «Output» отображается в «MetaProject». Коды возврата пока не учитываются. Посмотрю как это можно сделать. Вопрос чисто технический.

          Сильно утверждение :). Ближе к правде — там не только текст. Но текст более универсален как способ представления. И я знаю способ, как можно совместить дополнительные возможности с текстовым представлением.
          Покажу Вам одну картинку. Думаю это закроет дискуссию, что лучше «текст» или «не текст».
          Попробуйте представить это в виде текста.

          Очень сильное утверждение. Вы уверены, что выбранная вами цветовая гамма идеальна?
          Нет никакой цветовой гаммы. Вы можете менять цвета для любого сообщения (или вообще их убирать), просто кликая мышкой на поле с временной меткой.

          Это хорошо для фэйсбучека, на сайте проекта лучше текстом.
          На сайте это уже описано текстом. Этого никто не читает. Ну или почти никто…

          Ну и напоследок.
          Я взрослый человек, и понимаю, что не смогу убедить 100% тех к кому обращаюсь.
          Потому и не ставлю себе такую задачу.
          Есть люди, которые используют мой продукт. Эффективность их работы я буду увеличивать, совершенствуя свой продукт.
          Есть люди которых и так все устраивает. Желаю им удачи, и наши миры с ними не пересекутся.
          Каждому свое…


          1. Mikluho
            17.06.2019 12:31

            У меня самые популярные — Solution Explorer, Test Explorer.
            Если бы нормально работала интеграция с git+jira, то в этом списке был бы и Team Explorer, которым я часто пользовался, когда работал с TFS.
            В output иногда заглядываю, когда билд падает, да и то не каждый раз.

            Про сворачивание итогов билда проекта до одной строки — было когда-то, очень давно, сейчас ничего подобного найти не могу, а разглядывать портянку не хочу.

            Про фильтрация по проектам — у студии есть режим вывода «Build Order» — там уже все записи по каждому проекту сгруппированы.

            Покажу Вам одну картинку. Думаю это закроет дискуссию, что лучше «текст» или «не текст».
            По картинке не пойму, какова цель такого отображения.
            Но то, о чём я говорю, можно сделать на html. Там и активные элементы и текст, который можно выделить.

            Вы можете менять цвета для любого сообщения (или вообще их убирать), просто кликая мышкой на поле с временной меткой.
            Это не интуитивно. А экспортировать/импортировать цветовую схему можно?

            На сайте это уже описано текстом. Этого никто не читает. Ну или почти никто…
            Да потому что читать нечего. Есть список фич, но не понятно ни как они работают, ни как ими пользоваться, ни как это настраивать.

            Я взрослый человек, и понимаю, что не смогу убедить 100% тех к кому обращаюсь.
            Потому и не ставлю себе такую задачу.
            Ну так может и не делать таких громких заявлений, типа «Once you see this extension, you will forget standard output window»?