Бөлісу құралы:


Отладка временных путешествий — обзор

Снимок экрана: логотип отладки временных путешествий с изображением часов.

Что такое отладка временных путешествий?

Отладка временного выполнения (TTD) — это инструмент, который фиксирует трассировку вашего процесса во время выполнения и воспроизводит процесс позже и в прямом, и в обратном направлении. TTD помогает вам отлаживать проблемы, позволяя вам "перемотать" сеанс отладчика, а не воспроизводить проблему, пока вы не обнаружите ошибку.

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

TTD имеет преимущества по сравнению с файлами аварийного дампа, которые часто пропускают состояние и путь выполнения, что привело к окончательному сбою.

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

TTD является эффективным и функционирует с минимальными накладными затратами, поскольку фиксирует выполнение кода в файлах трассировки.

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

Снимок экрана WinDbg с функцией Time Travel Debugging и тремя временными шкалами.

Требования

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

Чтобы использовать TTD, необходимо запустить отладчик с повышенными разрешениями. Установите WinDbg с помощью учетной записи, которая имеет права администратора и использует эту учетную запись при записи в отладчике. Чтобы запустить отладчик с повышенными правами, выберите и удерживайте (или щелкните правой кнопкой мыши) значок WinDbg в меню "Пуск", а затем выберите "Больше > запуска от имени администратора".

Заметки о выпуске

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

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

служебная программа командной строки записи TTD.exe

Помимо записи трассировок в пользовательском интерфейсе WinDbg, доступна TTD.exe служебная программа командной строки для записи трассировки.

У вас могут быть сценарии, в которых требуется только средство записи командной строки TTD: запись на компьютере без установки отладчика, расширенных сценариев записи, автоматизации тестирования и т. д. В этих сценариях можно установить только средство записи командной строки TTD с помощью URL-адреса. Дополнительные сведения см. в статье "Отладка путешествий во времени" TTD.exe — служебная программа командной строки.

Сравнение средств отладки

В этой таблице перечислены преимущества и минусы различных доступных решений отладки.

Подход Плюсы Минусы
Динамическая отладка Знакомый инструмент в знакомой среде, интерактивный опыт, просмотр потока выполнения, возможность изменить целевое состояние. Нарушает опыт пользователя, может потребовать усилий для повторного воспроизведения проблемы, может повлиять на безопасность, не всегда возможно на производственных системах. При повторном выполнении трудно вернуться с точки сбоя, чтобы определить причину.
свалки Никакого кодирования заранее, с низким уровнем вторжения, основанный на триггерах. Последовательные моментальные снимки или динамические дампы предоставляют простое представление "с течением времени". Накладные расходы, по сути, равны нулю, если они не используются.
Данные телеметрии и журналы Легковесный, часто связанный с бизнес-сценариями и действиями пользователей, подходящий для применения в машинном обучении. Проблемы возникают в непредвиденных путях кода (без телеметрии). Отсутствие глубины данных, которые статически интегрированы в код.
Отладка с перемещением во времени (TTD) Отлично подходит для сложных багов, без необходимости предварительного написания кода, автономной повторяемой отладки, удобен для анализа, фиксирует все. Большие издержки при рекордной скорости. Может собирать больше данных, необходимых. Файлы данных могут стать большими.

Обучение видео

Дополнительные сведения о TTD см. в этих видео.

Defrag Tools 185 — Ivette и JamesP рассматривают основы TTD и демонстрируют некоторые функции в WinDbg

Инструменты Defrag 186 — Jordi и JCAB демонстрируют ещё больше отличных функций TTD в WinDbg

CppCon (YouTube) - Jordi, Кен и ДжеймсM представили TTD в WinDbg в CppCon 2017

Основы трассировки файла

Размер файла трассировки

Файл трассировки может увеличиться в размере. Необходимо убедиться, что достаточно свободного места. Если вы записываете программу даже на несколько минут, файлы трассировки могут быстро увеличиваться до нескольких гигабайтов. TTD не устанавливает максимальный размер файлов трассировки, чтобы поддерживать возможность сложных длительных сценариев. Быстрое повторное создание проблемы позволяет максимально уменьшить размер файла трассировки.

Файлы трассировки и индекса

Файл трассировки (.run) сохраняет выполнение кода во время записи.

При остановке записи система создает файл индекса (.idx) для оптимизации доступа к сведениям трассировки. WinDbg также автоматически создает файлы индексов при открытии файлов трассировки.

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

Файл индекса можно повторно создать из файла трассировки с помощью !tt.index команды.

0:000> !tt.index
Successfully created the index in 10ms.

Ошибки записи и другие выходные данные отправляются в файл журнала WinDbg.

Вы храните все выходные файлы в настроенном расположении. Расположение по умолчанию находится в папке документа пользователя. Например, для User1 файлы TTD хранятся здесь:

C:\Users\User1\Documents

Дополнительные сведения о работе с файлами трассировки см. в статье "Отладка перемещения по времени" — работа с файлами трассировки.

На что обратить внимание

Несовместимость антивируса

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

Другие служебные программы, которые пытаются заблокировать доступ к памяти, также могут быть проблемными. Например, набор инструментов расширенного смягчения последствий (EMET) от Майкрософт.

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

Только в пользовательском режиме

В настоящее время TTD поддерживает только операцию в пользовательском режиме, поэтому невозможно отслеживать процесс режима ядра.

Воспроизведение в режиме только для чтения

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

Системные защищенные процессы

Некоторые системные процессы Windows, такие как процесс с защитой типа Protected Process Light (PPL), защищены. TTD не может внедрить себя в защищенный процесс, чтобы разрешить запись выполнения кода.

Влияние записи на производительность

Запись приложения или процесса влияет на производительность компьютера. Фактические затраты на производительность зависят от объема и типа кода, выполняемого во время записи. Вы можете ожидать снижения производительности в типичном сценарии записи примерно в 10-20 раз. Иногда в пользовательском интерфейсе не наблюдается заметного замедления. Но для более ресурсоемких операций, таких как диалоговое окно "Открыть файл", вы увидите влияние записи.

Ошибки файла трассировки

Ошибки в файле трассировки могут произойти. Дополнительные сведения см. в статье "Отладка перемещения по времени" — устранение неполадок.

Расширенные функции отладки с перемещением во времени

Временные шкалы

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

Поддержка модели данных отладчика

  • Встроенная поддержка модели данных — TTD включает поддержку модели данных. Использование запросов LINQ для анализа сбоев приложений может быть мощным инструментом. Окно модели данных в WinDbg можно использовать для работы с расширяемой и просматриваемой версией dxdx -g, а также позволяет создавать таблицы с помощью запросов NatVis, JavaScript и LINQ.

Общие сведения о модели данных отладчика см. в статье WinDbg — модель данных. Дополнительные сведения о работе с объектной моделью отладчика TTD см. в статье "Отладка временных путешествий" — общие сведения о объектах отладки временных путешествий.

Поддержка сценариев

Общие сведения о работе с JavaScript и NatVis см. в статье WinDbg — Scripting.

служебная программа командной строки TTD.exe

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

Поддержка управляемого кода TTD

Расширение отладки SOS (sos.dll) можно использовать в 64-разрядном режиме для отладки управляемого кода с помощью TTD в WinDbg. Дополнительные сведения см. в разделе Отладка управляемого кода с помощью отладчика Windows.

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

Начните здесь

Если вы не знакомы с TTD, выполните следующую схему обучения:

  1. Запись трассировки — зафиксируйте свою первую трассировку выполнения
  2. Воспроизведение трассировки — навигация и анализ записи
  3. Пример пошагового руководства по приложению — пошаговый пример отладки

Нужна помощь?

Расширенные функции

  • Объекты отладчика TTD — трассировки запросов с помощью LINQ
  • Автоматизация JavaScript — исследование проблем посредством автоматизации