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

Time travel debugging logo featuring a clock.

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

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

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

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

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

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

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

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

Требования

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

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

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

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

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

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

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

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

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

Видео

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

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

Дефрагментация инструментов 186 — Jordi и JCAB демонстрация более отличных функций TTD в WinDbg

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

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

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

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

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

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

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

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

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

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

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

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

C:\Users\User1\Documents

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

Вещи, чтобы искать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Расширенные возможности отладки перемещения по времени

Вот некоторые из самых заметных расширенных функций TTD.

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

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

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

  • Встроенная поддержка модели данных — TTD включает поддержку модели данных. Использование запросов LINQ для анализа сбоев приложений может быть мощным инструментом. Окно модели данных в WinDbg можно использовать для работы с расширяемой и просматриваемой версией dx и dx -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

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

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