Поделиться через


Заметки о релизе отладки путешествия во времени

Логотип отладки путешествий во времени с изображением часов.

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

1.11.532

Это техническое обновление, которое делает более надежным процесс записи. Этот выпуск TTD совпадает с июньским выпуском Windbg 2025 года. Одна из новых возможностей — объект модели данных Position теперь отображает процент в трассировке.

Изменено

  • Прочее обслуживание инфраструктуры.
  • Используйте реализацию стандарта ISO для ключевого слова volatile в C++. (1.11.518)
  • Добавьте процент к проекции модели данных "Позиция". (1.11.514)

Исправлено

  • Увеличьте надежность обработки декодированных инструкций TTD. (1.11.530)
  • Удалите использование XSAVE в эмуляторе и оптимизируйте внутреннюю передачу регистра. (1.11.509)

1.11.506

Это небольшой выпуск, который совпадает с выпуском WinDbg в апреле 2025 года.

Изменено

  • Щелкните позицию TTD в модели данных (например, в списке модулей), чтобы перейти к этой позиции в трассировке. (1.11.492)

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

Исправлено

  • Добавьте имя процесса в .out файл при присоединении к PID для облегчения устранения неполадок. (1.11.486)

1.11.481

Мы обновили команду !tt, чтобы предоставить вам более эффективные способы перехода по трассировке:

  • Дробные проценты можно использовать для сужения пространства поиска (!tt 23.65)
  • Найдите предыдущее/следующее время изменения значения регистра (!tt br ebx)
  • Найдите предыдущий или следующий раз, когда доступ к диапазону памяти осуществляется (!tt ba- [addr] [range])
  • Найдите предыдущий или следующий раз выполнения, когда процесс переходит к другому модулю (!tt bm)
  • Найдите предыдущее/следующее выполнение при переходе к определенному модулю (!tt bm ntdll)

Дополнительные сведения см. в разделе !tt (путешествие по времени).

Некоторые важные исправления:

  • Пропали сообщения об ошибке: "64-разрядное значение теряет точность при преобразовании в число" при использовании @$cursession.TTD.Data.Heap() на 32-разрядной трассировке.
  • Анализ параметра справки (-?, -help) теперь правильно обнаружен в любой точке командной строки.
  • dx @$cursession.TTD.Calls() больше не требует, чтобы адреса соответствовали началу функции. Вместо этого адрес будет сопоставлен с началом ближайшей функции сопоставления.
  • TTD правильно сообщает целевую версию ОС из команды vertarget.
  • Использование "-monitor" с именем хостинговой службы перестало записывать несвязанные хостинговые службы.

Добавлено

  • Регистрация точек останова в трассировках TTD (1.11.431)

Изменено

  • Исправлена запись служб по имени с помощью режима монитора (1.11.477)
  • Захват сведений о ОС фактической целевой системы для использования отладчиком (1.11.473)
  • Исправлена передача регистров XMM между эмулятором и CONTEXT (1.11.469)
  • Разрешить вызовы по адресам внутри функции (1.11.459)
  • Поддержка символов в виде адресов и размеров в командной строке !tt (1.11.454)
  • Повышение согласованности и расширение возможностей команд навигации TTD (1.11.453)
  • Повышение согласованности базы данных модуля в условиях поврежденных данных (1.11.430)

Исправлено

  • Добавление имени процесса в выходные данные при присоединении к PID (1.11.486)
  • TTD. Data.Heap() сообщает "Ошибка: 64-разрядное значение теряет точность при преобразовании в число" в некоторых случаях (1.11.471)
  • Улучшите надежность записи процесса с включенными теневыми стеками (1.11.466)
  • Добавление навигации по модулю через !tt bm и модель данных (1.11.462)
  • Исправлены некоторые проблемы при синтаксическом анализе командной строки. (1.11.444)
  • Исправление lodsd, загрузка двойного слова по адресу (обнуление верхней части rax) (1.11.434)
  • Исправлены некоторые ошибки libfuzzer (1.11.433)

1.11.429

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

Примечание: в версии 1.11.410 была введена регрессия в эмуляцию инструкции Intel/AMD LODSD. Исправление для этого появится в следующем выпуске.

Исправления:

  • Улучшение устойчивости чтения пакетов и других различных изменений для повышения надежности.
  • Исправлена регрессия при эмуляции инструкции AVX VBROADCAST[I/F]128.
  • Исправлен доступ к записи исключений в ARM64 в более новых сборках Windows.

1.11.410

Улучшена доступность: Интерфейс прогресса теперь правильно масштабируется при изменении размера текста.

Команда @$cursession.TTD.Calls() в отладчике теперь поддерживает подстановочные знаки, соответствующие большому количеству функций. Теперь можно запрашивать большое количество функций (@$cursession.TTD.Calls("kernel32!*")).

Автоматизация: новый -onMonitorReadyEvent параметр командной строки указывает, когда монитор записи (-monitor коммутатор) готов к записи новых процессов.

Исправления:

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

Исправления для ARM64:

  • Исправлена ошибка, предотвращающая запись TTD на обычных ЦП уровня ARM64v8.0.
  • Улучшено обмен сообщениями при попытке использовать в ARM64 трассировку процесса x86 или x64.

Исправления AMD/Intel (включает некоторые проблемы, сообщаемые Google):

  • Исправлена неправильная эмуляция LODS: вместо отсчета неиспользуемых битов RAX они теперь сохраняются правильно.
  • Исправлена эмуляция инструкции pop ax в процессах x86/x64, которая неправильно обнуляла верхние биты регистра (например, "pop ax" очищала верхние биты rax).
  • Прямая эмуляция инструкции XGETBV (быстрее).
  • Прямая эмуляция всех перемещений AVX512 SIMD (быстрее).

1.11.316

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

Исправления для ARM64:

  • Запись в процессах ARM64 с включенной функцией PAC теперь поддерживается.
  • Исправлены инструкции ANDS и TST, которые не смогли очистить флаги переноски и переполнения.

Исправления AMD/Intel:

  • Исправлена ошибка, из-за которой TTD неправильно эмулировал "xchg r8,rax" и "xchg r8w, ax" как NOP.

1.11.304

TTD теперь реализует и публикует общедоступный API для управления записью во время активного процесса записи. Документация и пример можно найти в GitHub.

Теперь TTD может интегрироваться с отключенной записью с помощью нового -recordMode переключателя. По умолчанию TTD использует -recordMode Automatic , что приводит к записи всех потоков. Если -recordMode Manual задано, TTD внедряется в целевой процесс, но не записывает ничего, пока не будет сказано сделать это через вызов API.

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

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

Установленное расположение файла можно найти в PowerShell, выполнив следующие действия.

ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

Добавлено

  • Добавьте переключатель -recordmode для разрешения внедрения без автоматической записи (1.11.296)
  • Добавление переключателя -module и использование для создания конфигурации SR (1.11.291)
  • Пользовательские данные проекта, записанные API в процессе, в модель данных (1.11.286)
  • Добавьте новый TTDLiveRecorder.dll и подключите его вместе с TTDRecordCPU.dll (1.11.283)
  • Добавление компонентов воспроизведения в MSIX и исправление поиска пакета SDK (1.11.265)

Изменено

ничего

Исправлено

  • Обход ошибки в сериализаторе JSON nlohmann, который используется в некоторых внутренних инструментах (1.11.281)
  • Настройте выравнивание строк, чтобы избежать редкой ошибки CRT (1.11.279)
    • Было сообщено и исправлено в кодовых базах Visual Studio и операционной системы.
  • Несколько небольших исправлений из отчетов о сбоях Уотсона (1.11.276)
  • Исправлена регрессия, которая может привести к повреждению файла трассировки в некоторых случаях (1.11.264)

Известные проблемы

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

1.11.261

К заметным изменениям в этом выпуске относятся следующие:

  • [ARM64] Исправлено поведение инструкций SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 и TRN1, когда целевой регистр используется в качестве источника.
  • [ARM64] Исправлена проблема, из-за которой отладчик отображал регистры SIMD с нижними 64 битами, дублированными в верхние 64 бита.
  • [AMD64] Исправления эмуляции AVX512 для процессоров AMD Zen4 (регистры повреждены).

Изменено

  • Реализуйте новую систему управления версиями специально для эмулятора. (1.11.260)

Исправлено

  • Исправьте неисправные инструкции ARM64, в которых регистр назначения также используется в качестве источника. (1.11.261)
  • Исправьте обходное решение Zen4 для прямого возврата в эмулятор. (1.11.222)

1.11.202

Этот выпуск устраняет ряд проблем, возникающих при запуске служб записи или мониторинга с помощью коммутатора -monitor . Она также удаляет поддержку записи ARM32 из продукта.

Изменено

  • Уменьшите двоичный размер, связав компоненты TTD с UCRT в виде библиотеки DLL. (1.11.191)

Исправлено

  • Исправлена запись сервисов. (1.11.193)
  • Устранение нескольких проблем при использовании -monitor. (1.11.189)
  • Исправлен кадр стека функции, который сохраняет регистры с невольной изменяемостью при выполнении альтернатив на x64 (1.11.188)
  • Повторное включение буферизации выходных данных для TTD (1.11.187)
  • Исправлена обработка дескриптора GPO в ProcessMonitorServer (1.11.179)

Удаленные

  • Удаление кода записи ARM32 из репозитория (1.11.198)

1.11.173

Этот выпуск повышает видимость определенных сообщений об ошибках, извлекая их из файла .out и выводя их на консоль. Он также устраняет редкий сбой во время воспроизведения трассировки.

Изменено

  • Извлечение и вывод сообщений об ошибках из .out файла (1.11.173)

Исправлено

  • Исправьте конфликт файла при чтении .out файла из отдельного процесса. (1.11.171)
  • Исправлен редкий сбой при воспроизведении трассировки. (1.11.166)

1.11.163

В этом выпуске добавлена поддержка записи процессов x86 на компьютерах x64.

Изменено

  • Исправлена запись x86 с установкой x64 TTD (1.11.163)

Исправлено

  • Очистка EULA (1.11.161)

1.11.159

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

Новый -timestampFileName коммутатор включает создание файла run на основе метки времени. Это полезно при записи большого количества экземпляров одного и того же процесса и требуется свести к минимуму время запуска записи.

Изменено

  • Выберите режим внедрения по умолчанию во время выполнения, на основе которого используется трассировщик (1.11.156)
  • Добавьте переключатель для включения создания файла .run, основанного на метке времени (1.11.155)
  • Добавление EULA и -accepteula в TTD (1.11.154)
  • Добавление ProcLaunchMon.sys в MSIX (1.11.153)
  • Создание на арку MSIX и MSIXBUNDLE (1.11.152)
  • Исправьте ряд проблем, которые возникли при тестировании TTD, созданной с помощью Clang. (1.11.146)
  • Исправления Clang для TTDAnalyze (1.11.144)

Исправлено

  • Ознакомьтесь с отзывами о приложении appinstaller / общедоступном выпуске (1.11.159)
  • Отзыв rc (1.11.157)
  • Избегайте перезаписи регистра "Ноль", инициализировав RegisterInfo, чтобы указывать на Sink. (1.11.149)
  • Исправьте инструкцию TST с помощью немедленного и усовершенствования модульного теста, чтобы охватить его и многое другое. (1.11.148)
  • Консолидация решения о защищенном процессе и отключение использования защищенного процесса (1.11.147)

1.11.138

Изменено

  • Создание средства записи MSIX (1.11.138)
  • Исправьте все проблемы, чтобы Clang смог создать TTD. (1.11.137)
  • Введите -monitor X как способ записи процесса при запуске (1.11.116)

Исправлено

  • Исправить эмуляцию ARM64 "CMP ZR" (1.11.128)
  • Исправлена эмуляция AVX512 на процессорах AMD Zen4 (1.11.127)
  • Исправлен механизм использования TTD для поиска файлов для определенного ЦП (1.11.121)
  • Исправлена регрессия x86 TTD (TTDRecordCPU.dll не загружается) (1.11.110)
  • Исправлено возвращение к исходному пути на ARM64, чтобы не повредить X28 (1.11.109)

См. также

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

Отладка перемещения по времени — средство записи командной строки