company_banner

Time Travel Debugging в Visual Studio Enterprise 2019

Автор оригинала: Mark Downie
  • Перевод
Превью-версия Time Travel Debugging (TTD) в Visual Studio Enterprise 2019 позволяет записывать выполнение веб-приложения, запущенного на виртуальной машине Azure, а затем точно восстанавливать и воспроизводить алгоритм. TTD интегрируется с нашим предложением Snapshot Debugger и позволяет вам перематывать и воспроизводить каждую строку кода сколько угодно раз, помогая идентифицировать и предсказывать проблемы, которые могут возникнуть только в боевых средах.


Картинка взята со страницы игры Quantum Break (18+) в Microsoft Store. Кстати, там на нее сегодня скидка 75% ($10). Если кто-то хотел, но не нашел возможности, рекомендуем.



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

image

Сегодня мы рады объявить о выпуске Time Travel Debugging (TTD) в Visual Studio Enterprise. С TTD мы даем вам возможность записывать код, выполненный в рабочей среде, и воспроизводить путь выполнения внутри Visual Studio. TTD также дает вам возможность двигаться вперед и назад во времени, как если бы вы выполняли локальную отладку «внутреннего цикла». Вы также получаете доступ к важным функциям отладки, таким как locals и стек вызовов.

Современные отладчики обычно позволяют вам остановиться на определенной точке (breakpoint), прервав весь процесс, а только затем двигаться вперед. Даже с более продвинутыми инструментами отладки, такими как IntelliTrace, вы записываете события и данные в дискретные моменты времени. TTD обладает значительным преимуществом по сравнению со снапшотами, логгированием или файлами аварийных дампов, поскольку эти методы обычно не содержат точных сведений о пути выполнения, который привел к окончательному сбою или ошибке.

Что такое «Time Travel Debugging»?


Time Travel Debugging (TTD) — это решение для обратной отладки, которое позволяет записывать выполнение кода в приложении или процессе и воспроизводить его как вперед, так и назад. TTD улучшает отладку, так как вы можете вернуться назад во времени, чтобы лучше понять условия, которые приводят к конкретной ошибке. Кроме того, вы можете воспроизвести ее несколько раз, чтобы понять, как лучше исправить проблему. Технология TTD была недавно представлена в превью-версии WinDbg для сценариев с нативным кодом.

Мы расширили Snapshot Debugger с помощью TTD, чтобы вы могли записывать приложения по мере их выполнения. Затем эту запись можно воспроизвести в Visual Studio Enterprise 2019, где вы можете перематывать и воспроизводить каждую строку кода столько раз, сколько захотите. TTD делает запись в потоке, который соответствует условиям snappoint и обычно выполняется до конца метода. Но если до окончания метода после snappoint есть «await», запись будет остановлена. Эта функция будет в превью для выпуска Visual Studio 2019 с действующей лицензией. Мы планируем добавить больше сценариев TTD в будущих обновлениях.

Начало работы с TTD


Предварительный просмотр Time Travel Debugging может быть включён в последней версии Visual Studio Enterprise 2019 для виртуальных машин Azure под управлением ОС Windows с ASP.NET (4.8+).

После установки последней версии Visual Studio Enterprise выполните следующие шаги:

1. Откройте проект, который требуется Time Travel Debug — убедитесь, что у вас есть та же версия исходного кода, которая опубликована на виртуальной машине Azure.

2. Выберите Debug > Attach Snapshot Debugger и выберите виртуальную машину Azure, на которой развернут ваш проект вместе с учетной записью хранилища Azure. При первой попытке подключения вам потребуется установить расширение сайта Snapshot Debugger.

3. Выберите параметр Time Travel Debugging и нажмите кнопку Attach. Как только Visual Studio перейдет в режим Snapshot Debugger, она сможет вести запись с помощью TTD.

image

4. Создайте snappoint и настройте ее для включения Time Travel Debugging. Нажмите Start\Update Collection.

image

5. После того, как ваш Snapshot был собран, нажмите View Snapshot, и вы сможете использовать панель команд для перехода вперед и назад в пределах записанного метода.

image

Ограничения превью-версии TTD
На начальной превью-стадии TTD мы будем поддерживать веб-приложения AMD64, работающие на виртуальной машине Azure. Мы ожидаем, что запись добавит значительные накладные расходы вашему запущенному процессу, замедляя его в зависимости от размера процесса и количества активных потоков. Мы также ожидаем ухудшения отладки в некоторых из следующих сценариев:

  • Во время фазы уплотнения GC.
  • Переход через оптимизированный метод, например, когда вы входите в метод, который не содержит snappoint.
  • Если ваше приложение внутренне загружает или выгружает домены приложений.
  • Запись происходит только в потоке, который был вызван snappoint. Код, который впоследствии воздействует на альтернативные потоки, также будет ухудшен.

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

Во время предварительного тестирования мы обнаружили, что размер файла TTD варьировался от нескольких сотен мегабайт до нескольких гигабайт в зависимости от продолжительности сеанса и продолжительности работы веб-приложения. Однако файлы, созданные TTD, будут очищены после завершения сеанса Snapshot Debugger и инициации перезапуска пула приложений. Для нашего предварительного выпуска мы также рекомендуем использовать виртуальную машину с минимум 8 ГБ ОЗУ.

Попробуйте TTD сейчас!


Мы невероятно рады тому, как эта функция предварительного просмотра может помочь вам улучшить отладку в Azure, но это только начало. Наша команда продолжает разрабатывать и создавать дополнительные возможности TTD, которые мы планируем добавить в предстоящих выпусках Visual Studio.

Мы рассчитываем на ваш фидбэк!
Microsoft
754,00
Microsoft — мировой лидер в области ПО и ИТ-услуг
Поделиться публикацией

Комментарии 6

    +3

    Как я долго этого ждала :)

      –4
      Господа, вы бы лучше оставили возможность Skype работать в FireFox.

      А то ведь получается, что машину времени изобрели, а со своим продуктом не можете совладать. Закрадываются подозрения в чьей-то некомпетентности.
        –4
        А ещё Skype for business разучился работать с iOS 10. Машина времени…
        0
        Штука наверное полезная, но будет ли такое для локальных .NET приложений? Существующий функционал немного не то, да?

        Кроме того основная польза от такого режима была-бы при срабатывании его ретроспективно при наступлении ошибки или по условию. Мечта иметь что-то типа PS4 game recording, когда видео пишется постоянно, а сохранается по запросу. Понятно, что все будет медленно, но иногда эту цену можно заплатить.

        Такой крешдамп с историей.

        А ещё асинхронные причинно-следственные связи — это самая мякотка! Вот где конь не валялся!
          0
          Планируется ли TTD для С++? Очень хотелось бы.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое