Visual Studio Enterprise 2019 Time Travel Debugging preview version
Time Travel Debugging (TTD) в Visual Studio Enterprise 2019 позволяет записывать выполнение веб-приложения, запущенного на виртуальной машине Azure, а затем точно восстанавливать и воспроизводить алгоритм. TTD интегрируется с нашим предложением Snapshot Debugger и позволяет вам перематывать и воспроизводить каждую строку кода сколько угодно раз, помогая идентифицировать и предсказывать проблемы, которые могут возникнуть только в боевых средах.
Наиболее эффективный тип отладки часто происходит в так называемом «внутреннем цикле». Когда вы просматриваете и отлаживаете код локально, прежде чем вы перейдете к управлению версиями. Проблемы, с которыми мы сталкиваемся во время разработки внутреннего цикла, обычно легче понять и диагностировать, потому что они доступны и повторяемы.
Microsoft объявил о выпуске Time Travel Debugging (TTD) в Visual Studio Enterprise. С TTD Microsoft дает вам возможность записывать код, выполненный в рабочей среде, и воспроизводить путь выполнения внутри Visual Studio. TTD также дает вам возможность двигаться вперед и назад во времени, как если бы вы выполняли локальную отладку «внутреннего цикла». Вы также получаете доступ к важным функциям отладки, таким как locals и стек вызовов.
Современные отладчики обычно позволяют вам остановиться на определенной точке (breakpoint), прервав весь процесс, а только затем двигаться вперед. Даже с более продвинутыми инструментами отладки, такими как IntelliTrace, вы записываете события и данные в дискретные моменты времени. TTD обладает значительным преимуществом по сравнению со снапшотами, логгированием или файлами аварийных дампов, поскольку эти методы обычно не содержат точных сведений о пути выполнения, который привел к окончательному сбою или ошибке.
Time Travel Debugging (TTD) — это решение для обратной отладки, которое позволяет записывать выполнение кода в приложении или процессе и воспроизводить его как вперед, так и назад. TTD улучшает отладку, так как вы можете вернуться назад во времени, чтобы лучше понять условия, которые приводят к конкретной ошибке. Кроме того, вы можете воспроизвести ее несколько раз, чтобы понять, как лучше исправить проблему. Технология TTD была недавно представлена в превью-версии WinDbg для сценариев с нативным кодом.
Microsoft расширил Snapshot Debugger с помощью TTD, чтобы вы могли записывать приложения по мере их выполнения. Затем эту запись можно воспроизвести в Visual Studio Enterprise 2019, где вы можете перематывать и воспроизводить каждую строку кода столько раз, сколько захотите. TTD делает запись в потоке, который соответствует условиям snappoint и обычно выполняется до конца метода. Но если до окончания метода после snappoint есть «await», запись будет остановлена. Эта функция будет в превью для выпуска Visual Studio 2019 с действующей лицензией. Мы планируем добавить больше сценариев 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.
4. Создайте snappoint и настройте ее для включения Time Travel Debugging. Нажмите Start\Update Collection.
5. После того, как ваш Snapshot был собран, нажмите View Snapshot, и вы сможете использовать панель команд для перехода вперед и назад в пределах записанного метода.
Ограничения превью-версии TTD
На начальной превью-стадии TTD мы будем поддерживать веб-приложения AMD64, работающие на виртуальной машине Azure. Мы ожидаем, что запись добавит значительные накладные расходы вашему запущенному процессу, замедляя его в зависимости от размера процесса и количества активных потоков. Мы также ожидаем ухудшения отладки в некоторых из следующих сценариев:
- Во время фазы уплотнения GC.
- Переход через оптимизированный метод, например, когда вы входите в метод, который не содержит snappoint.
- Если ваше приложение внутренне загружает или выгружает домены приложений.
- Запись происходит только в потоке, который был вызван snappoint. Код, который впоследствии воздействует на альтернативные потоки, также будет ухудшен.
Обратите внимание: мы также не будем записывать асинхронные причинно-следственные связи.
Во время предварительного тестирования Microsoft обнаружил, что размер файла TTD варьировался от нескольких сотен мегабайт до нескольких гигабайт в зависимости от продолжительности сеанса и продолжительности работы веб-приложения. Однако файлы, созданные TTD, будут очищены после завершения сеанса Snapshot Debugger и инициации перезапуска пула приложений. Для предварительного выпуска Microsoft также рекомендует использовать виртуальную машину с минимум 8 ГБ ОЗУ.