По сути не менялся десятилетиями и до этих пор выглядит как то так:
Текст, текст и еще раз текст. Много текста...
Даже в этом крошечном примере не сразу видно где строка с ошибкой. Для того чтобы это понять, нужно приложить усилия и потратить время. Просто потому что нужно читать текст и искать в нем слова “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)
VioletGiraffe
13.06.2019 17:10Чтобы легко и просто видеть ошибки, есть View -> Error list.
viacheslav-lozinskyi Автор
13.06.2019 17:17По факту MetaProject конкурирует с «Output» + «Error list» + «VSColorOutput» + «Output Window Filter» + «Time Stamp Margin», и успешно их заменяет. И не только их. Можете это проверить и в этом убедиться.
alex_zzzz
13.06.2019 17:27Можно ли как-нибудь так закрыть окно Output, чтобы оно больше никогда само не открывалось? Толку от него ноль. Надоедает периодически закрывать.
yatagarasu
13.06.2019 17:33Options -> Project and Solutions -> General -> Show Output…
Толку от него ноль.
Странно, самое полезное окно же )
perfect_genius
13.06.2019 20:56А нельзя ли вообще обойтись без этого окна и перемещаться по коду, например, по указателям на места с ошибками?
viacheslav-lozinskyi Автор
13.06.2019 21:15«Output» в любой среде разработки создавался как агрегатор всех сообщений. Логи в работающей программе тоже при желании можно перенаправить в этот инструмент. Для этого Windows разработчикам достаточно вызвать OutputDebugString(...) или System.Diagnostics.Debug.WriteLine(...). Т.е. это не только средство для показа ошибок и предупреждений. Это гораздо гораздо более сложная вещь. Даже в самой простой реализации…
viacheslav-lozinskyi Автор
14.06.2019 07:42Кстати, если у Вас есть идеи как можно обойтись вообще без «Output», я с удовольствием их выслушаю. Если эти идеи жизнеспособны, готов их даже реализовать.
perfect_genius
14.06.2019 08:04Сейчас подумал и дошло, что обычно приходится прокручивать этот список когда пропускаю закрывающую скобку или там тип выставил неправильный. А если программу запустил, а она вываливается с ошибкой — Visual Studio приводит и указывает прямо на место в коде. Хотелось, чтобы любые баги приводило сразу на нужное место, но ведь со скобками это не определить. Так что не мешает и идей нет :)
4e1
14.06.2019 09:38вы зациклились только на одной IDE (имхо — не самой лучшей)
для примера QtCreator — сама вкладка «Compile output» выводит ошибки красным тескстом, также имеется возможность сделать поиск по тексту выхлопа компиляции нажав Ctrl+F, также есть отдельно вкладка Issues, где будут отображаться только ошибки/варнинги с минимумом лишней информацииviacheslav-lozinskyi Автор
14.06.2019 10:03Я не зациклился на Visual Studio, я с нее начал. Это разные вещи.
DirectoriX
14.06.2019 11:19На самом деле в Qt Creator'е цветной вывод сборки при использовании GCC, а если использовать MS VC, то вывод такой же унылый одноцветный.
Вероятно, это связано с использованием make
tangro
14.06.2019 10:50А что это такое? Зачем расширение при установке тащит IncrediBuild?
viacheslav-lozinskyi Автор
14.06.2019 10:53Это стандартный инсталятор Visual Studio. Почему он пишет эту строчку я не знаю. Сам удивлен. Никакого Incredibuild по факту не ставится. Можете проверить.
tangro
14.06.2019 10:54Проверил. Ставится. Появляется билд-агент в трее и меню IncrediBuild в студии.
viacheslav-lozinskyi Автор
14.06.2019 11:05Вы меня озадачили. Только что снес расширение и поставил его заново. Все снеслось и установилось. Нет вообще даже намека на «Incredibuild», ни в инсталяторе, ни в IDE.
viacheslav-lozinskyi Автор
14.06.2019 11:59Возможно проблема в «Incredibuild»? Вы не пробовали проверить, его вообще можно деинсталировать?
truthfinder
14.06.2019 12:01Нет перехода по клику на проблемное место. Или я что-то делал не так? Приходится снова искать ошибку в стандартном Output и кликать на неё, чтобы перейти куда надо. В общем не допилен инструмент. Хотя задумка хорошая. И вот эта иконка винды слева и пространство под ней. Вы серъёзно? Ну нафига? Кто дизайнил? Хочется сильно ругаться. Место занимает полезное только.
viacheslav-lozinskyi Автор
14.06.2019 12:03В каждой строке, где возможен переход на код, справа должна быть стрелочка. Нажатие данной кнопки делает переход на нужную строку в коде.
По стрелочкам, кстати, видно где есть переход на код, а где нет.truthfinder
14.06.2019 12:05— Я не вижу стрелочки.
— Стрелочка это неудобно. В стрелочку надо ещё целиться, мышь вести туда. Это сложнее чем в строчку.viacheslav-lozinskyi Автор
14.06.2019 12:07+1Я добавлю поддержку DblClick для таких случаев на строке (как в стандартном «Output»).
viacheslav-lozinskyi Автор
14.06.2019 12:19Относительно той части которая Вам кажется лишней по дизайну, могу сказать следующее. Это сделано не случайно, и со следующей версии MetaProject будет очевидно, что ничего лучшего чем тот дизайн который Вы видите, не возможно представить. Сейчас конечно это не очевидно, и выглядит бессмысленным.
gasizdat
14.06.2019 15:24Фолдинг сообщений об ошибках в глубоких шаблонных специализациях был бы действительно полезен. Для всего остального есть Error List и его автоматическая синхронизация с Output по выделению.
viacheslav-lozinskyi Автор
14.06.2019 16:10Фолдинг сообщений в MetaProject уже реализован. «Error List» и «Output» можно использовать и после установки расширения, если будет такое желание. Они никуда не деваются.
wunderwaffel
14.06.2019 15:39Из первых впечатлений:
1. Слишком пёстро на мой вкус. Большинство строк я бы оставил просто серыми — например о том, какой проект куда записал бинарник.
2. Несколько пикселей от самой нижней строки съедает поле ввода фильтра, в итоге текст обрезан
3. Хорошо бы эту панельку автоматически открывать при начале сборки как это делает стандартный output
4. Иконки — привет из 90-х
Спасибо в любом случае ;)viacheslav-lozinskyi Автор
14.06.2019 16:35Спасибо за первый мини обзор данного расширения :)
1. Поддерживаются два режима — первый, когда по умолчанию раскрашивается все, а второй, когда по умолчанию не раскрашивается ничего. Переключаются режимы через выпадающее меню (пункт «Auto colorize»);
2. Я согласен с Вами, что вертикальный размер более приоритетный, но это тот минимум, в который я могу уместить все что требуется. Речь идет, в том числе, и о дополнительных возможностях, которые появятся в новых версиях;
3. Вы имеете в виду режим, когда панель прилеплена к кромке, и скрыта?
4. «Не стреляйте в пианиста, он играет как умеет». Я все таки не дизайнер :)wunderwaffel
14.06.2019 16:441. Отключил авто, ничего не изменилось.
2. Проблема была в том, что самая нижняя строка была обрезана (перекрыта полем ввода) примерно по середине по высоте. Не могу воспроизвести.
3. Да
В общем норм тулза, удачи в дальнейших улучшениях!viacheslav-lozinskyi Автор
14.06.2019 16:531. При переключении режима, сигнатуры строк (по которым происходит раскраска и маскировка) не сбрасываются. Это изменение относится только к новым строкам, которые еще до этого не показывались.
2. Ели это так, то это баг. Буду пробовать воспроизвести ситуацию…
3. В следующей минорной версии это будет сделано.
viacheslav-lozinskyi Автор
14.06.2019 17:10Кстати, цвета или вообще их отсутствие, Вы можете менять по своему желанию. Для этого нужно всего лишь кликнуть на поле где отображается временная метка.
Endeavour
14.06.2019 15:55Возможно ли sysout/sysinput заставить работать через это окно, как, например, в Eclipse?
viacheslav-lozinskyi Автор
14.06.2019 16:15Можно весь вывод перенаправить в это окно если в своей программе сделать вызовы функций OutputDebugString(...) (в С++) или System.Diagnostics.Debug.WriteLine(...) (в .NET). С другой стороны можно подумать как это автоматизировать…
Mikluho
17.06.2019 00:23Имхо, окно вывода называть самым популярным инструментом — перебор.
Тем более называть эволюцией кастомную раскраску…
Хотя сама попытка существенно улучшить это окно — хорошая идея.
Вот есть ли у вас группировка событий в окне вывода при сборке по проектам? Так, чтобы можно было по умолчанию оставить только одну строку с результатом билда, и раскрывать детали по клику?
Есть возможность одним кликом включать/выключать показ только ошибок, предупреждений?
А учитываются ли как ошибки неудачные вызовы утилит командной строки?
А почему нельзя нормально копировать текст, как в обычном окне вывода?
Настроек нет совсем на столько, что стандартном меню настроек есть только текст лицензии?
Где нибудь можно почитать описание фич, настроек, планов развития?
Отвечая на цитату:
Once you see this extension, you will forget standard output window
Нет, мне стандартное окошко вывода с имеющимся плагинами удобнее.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. Относительно планов развития — на фейсбуке сделал группу в которой готов это обсуждать с теми, кто заинтересован в развитии данного проекта. Если Вам это интересно, подписывайтесь.
Ну и наконец, я не ставлю цель изменить вкусы разработчиков.
Кто хочет пользоваться чем то другим, пусть пользуется.Mikluho
17.06.2019 07:26Я, например, не знаю чего то более используемого чем «Output».
Так уже честнее — этот инструмент популярен у вас лично.
Ок, тогда вопрос, а какие задачи вы с его помощью решаете? Я иногда ищу там ошибки компиляции, очень редко посматриваю вывод трассировки.
1. Группировки по проектам нет и не будет. Не вижу в этом смысла.
А мне кажется удобным по умолчанию видеть при сборке только статус каждого проекта. Остальная портянка только мешает, как бы она не была раскрашена.
4. Насчет «ошибок командной строки» не понял вопроса. Поясните пожалуйста, что имеется в виду.
Для сборки некоторых типов проектов студия может вызывать дополнительные команды. Например — вызов nodejs. Вывод этих команд также попадает в окно вывода, а результат билда оценивается по коду возврата этой команды.
Я первый, кто стал утверждать что «Output» — это НЕ текст. Кто окажется прав, покажет время.
Сильно утверждение :). Ближе к правде — там не только текст. Но текст более универсален как способ представления. И я знаю способ, как можно совместить дополнительные возможности с текстовым представлением.
6. Настройки появятся для дополнительного функционала, где это будет обосновано. Текущий функционал настроек не требует.
Очень сильное утверждение. Вы уверены, что выбранная вами цветовая гамма идеальна?
7. Готовится видео-презентация возможностей расширения.
Это хорошо для фэйсбучека, на сайте проекта лучше текстом.
Ну и наконец, я не ставлю цель изменить вкусы разработчиков.
Кто хочет пользоваться чем то другим, пусть пользуется.
И как это соотносится с заглавным утверждением на страничке расширения?viacheslav-lozinskyi Автор
17.06.2019 11:23Назовите пожалуйста более используемый инструмент чем «Output».
А мне кажется удобным по умолчанию видеть при сборке только статус каждого проекта. Остальная портянка только мешает, как бы она не была раскрашена.
Насколько я понимаю, Вы сейчас пользуетесь каким то расширением, которое уже это делает, и возможно делает еще что то крутое? Можно узнать его название?
Относительно возможности это сделать — готов согласиться с тем, что можно добавить еще фильтрацию по проектам. Ну типа комбобокса, в котором будет возможность выбрать интересующий проект. Это будет полезно.
Вывод этих команд также попадает в окно вывода, а результат билда оценивается по коду возврата этой команды.
Все что Вы видите в стандартном «Output» отображается в «MetaProject». Коды возврата пока не учитываются. Посмотрю как это можно сделать. Вопрос чисто технический.
Сильно утверждение :). Ближе к правде — там не только текст. Но текст более универсален как способ представления. И я знаю способ, как можно совместить дополнительные возможности с текстовым представлением.
Покажу Вам одну картинку. Думаю это закроет дискуссию, что лучше «текст» или «не текст».
Попробуйте представить это в виде текста.
Очень сильное утверждение. Вы уверены, что выбранная вами цветовая гамма идеальна?
Нет никакой цветовой гаммы. Вы можете менять цвета для любого сообщения (или вообще их убирать), просто кликая мышкой на поле с временной меткой.
Это хорошо для фэйсбучека, на сайте проекта лучше текстом.
На сайте это уже описано текстом. Этого никто не читает. Ну или почти никто…
Ну и напоследок.
Я взрослый человек, и понимаю, что не смогу убедить 100% тех к кому обращаюсь.
Потому и не ставлю себе такую задачу.
Есть люди, которые используют мой продукт. Эффективность их работы я буду увеличивать, совершенствуя свой продукт.
Есть люди которых и так все устраивает. Желаю им удачи, и наши миры с ними не пересекутся.
Каждому свое…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»?
Потому и не ставлю себе такую задачу.
u_235
То есть программисту лень вставить время при выводе сообщений в консоль и эту проблему решает расширение для IDE? А на стороне клиента это как поможет?
viacheslav-lozinskyi Автор
В этом расширении фиксируется время появления данной строки в IDE. Точно также как и в соответствующем аналоге от Microsoft. Эти временные метки нужны чтобы можно было понять время между двумя событиями.
Ну, например, сколько времени прошло между запросом на сервер и откликом.
Punk_Joker
это насколько я понял временные метки операций сборки
viacheslav-lozinskyi Автор
В «Time Stamp Margin» метки отображаются только в режиме Debug, в «MetaProject» во всех режимах.