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

Логотип отладки перемещения по времени с часами.

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

Когда следует использовать программу командной строки TTD.exe

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

Во многих сценариях проще всего использовать TTD для записи приложения или процесса непосредственно из пользовательского интерфейса WinDbg. Сведения об отладке перемещения по времени с помощью пользовательского интерфейса WinDbg см. в разделе Отладка перемещения по времени — обзор.

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

Запись TTD влияет на записанный процесс

Запись TTD является инвазивной технологией. Вы заметите в любом месте от 5x до 20x или более замедление запущенного приложения или процесса во время записи, в зависимости от приложения и выбранных параметров записи.

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

После присоединения TTD к процессу его невозможно удалить из него. Закройте приложение или завершите процесс после завершения записи TTD. Для критически важных для системы процессов потребуется перезагрузка ОПЕРАЦИОННОй системы.

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

Скачивание и установка служебной программы командной строки TTD.exe (предпочтительный метод)

Скачайте служебную программу командной строки TTD здесь: https://aka.ms/ttd/download

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

Если у вас возникли проблемы с установкой, см. статью Устранение неполадок с установкой файла установщика приложений.

На некоторых компьютерах может потребоваться установить Установщик приложений (Майкрософт) для Windows 10. Он доступен в приложении Microsoft Store в Windows. Диспетчер пакетов Windows поддерживается с помощью установщика приложений, начиная с Windows 10 1809.

Скачивание и установка служебной программы командной строки TTD.exe (автономный метод)

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

Извлечение файлов из уже установленной программы командной строки TTD.exe

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

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

Оттуда можно скопировать все двоичные файлы (*.dll, *.exe, *.sys) в новое расположение. Вот один из способов сделать это в PowerShell:

robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata

Замените "c:\myttd" выбранным назначением. Результат будет выглядеть примерно так (на компьютере x64):

ls -Recurse c:\myttd

    Directory: C:\myttd

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           11/9/2023  2:43 PM                x86
-a---           11/9/2023  2:43 PM          79240 ProcLaunchMon.sys
-a---           11/9/2023  2:43 PM         112568 TTD.exe
-a---           11/9/2023  2:43 PM         309176 TTDInject.exe
-a---           11/9/2023  2:43 PM          55328 TTDLoader.dll
-a---           11/9/2023  2:43 PM         821176 TTDRecord.dll
-a---           11/9/2023  2:43 PM        1222584 TTDRecordCPU.dll
-a---           11/9/2023  2:43 PM          63416 TTDRecordUI.dll

    Directory: C:\myttd\x86

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           11/9/2023  2:43 PM         247728 TTDInject.exe
-a---           11/9/2023  2:43 PM          42928 TTDLoader.dll
-a---           11/9/2023  2:43 PM        1128480 TTDRecordCPU.dll

Обратите внимание, что двоичные файлы x86 находятся в подкаталоге. Если вам не нужно записывать 32-разрядные процессы, эту папку можно удалить (и вы можете добавить /xd xd x86 в команду robocopy, чтобы избежать ее копирования). Версия ARM64 не имеет подкаталогов.

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

Скачайте пакет служебной программы командной строки TTD.exe и извлеките файлы вручную.

Если вы не хотите устанавливать программу командной строки TTD, можно скачать пакет и извлечь файлы вручную. Следующий сценарий PowerShell:

  • Получите URL-адрес текущей версии TTD из https://aka.ms/ttd/download.
  • Скачайте пакет MSIX.
  • Извлеките msix запрошенной архитектуры из пакета MSIX.
  • Извлеките двоичные файлы TTD из MSIX.
param(
    $OutDir = ".",
    [ValidateSet("x64", "x86", "arm64")]
    $Arch = "x64"
)

# Ensure the output directory exists
if (!(Test-Path $OutDir)) {
    $null = mkdir $OutDir
}

# Ensure the temp directory exists
$TempDir = Join-Path $OutDir "TempTtd"
if (!(Test-Path $TempDir)) {
    $null = mkdir $TempDir
}

# Determine if the destination already contains binaries
$extensions = @('.dll', '.exe', '.sys')
$existingBinaries = (Get-ChildItem -recurse $OutDir | Where-Object Extension -In $extensions).Count -gt 0

# Download the appinstaller to find the current uri for the msixbundle
Invoke-WebRequest https://aka.ms/ttd/download -OutFile $TempDir\ttd.appinstaller

# Download the msixbundle
$msixBundleUri = ([xml](Get-Content $TempDir\ttd.appinstaller)).AppInstaller.MainBundle.Uri

if ($PSVersionTable.PSVersion.Major -lt 6) {
    # This is a workaround to get better performance on older versions of PowerShell
    $ProgressPreference = 'SilentlyContinue'
}

# Download the msixbundle (but name as zip for older versions of Expand-Archive)
Invoke-WebRequest $msixBundleUri -OutFile $TempDir\ttd.zip

# Extract the 3 msix files (plus other files)
Expand-Archive -DestinationPath $TempDir\UnzippedBundle $TempDir\ttd.zip -Force

# Expand the build you want - also renaming the msix to zip for Windows PowerShell
$fileName = switch ($Arch) {
    "x64"   { "TTD-x64"   }
    "x86"   { "TTD-x86"   }
    "arm64" { "TTD-ARM64" }
}

# Rename msix (for older versions of Expand-Archive) and extract the debugger
Rename-Item "$TempDir\UnzippedBundle\$fileName.msix" "$fileName.zip"
Expand-Archive -DestinationPath "$OutDir" "$TempDir\UnzippedBundle\$fileName.zip"

# Delete the temp directory
Remove-Item $TempDir -Recurse -Force

# Remove unnecessary files, if it is safe to do so
if (-not $existingBinaries) {
    Get-ChildItem -Recurse -File $OutDir |
        Where-Object Extension -NotIn $extensions |
        Remove-Item -Force

    Remove-Item -Recurse -Force (Join-Path $OutDir "AppxMetadata")
} else {
    Write-Host "Detected pre-existing binaries in '$OutDir' so did not remove any files from TTD package."
}

Если вы сохранили приведенный выше сценарий как Get-Ttd.ps1, его можно запустить следующим образом, чтобы скачать двоичные файлы x64 в каталог c:\myttd:

md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1

Или можно указать выходной каталог и архитектуру:

.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64

Замените "c:\myttd" или "c:\myttd-arm64" выбранным назначением.

Запись трассировки с помощью программы командной строки TTD.exe

Существует три способа записи трассировки.

  • Запуск процесса
  • Присоединение к процессу
  • Мониторинг процесса

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

Совет

Для записи трассировок TTD требуются права администратора. Обычно это делается путем запуска ttd.exe из командной строки администратора.

Дополнительные сведения о записи трассировки перемещения по времени с помощью WinDbg см. в разделе Отладка перемещения по времени — запись трассировки.

Запуск процесса

-launch <Program> [<arguments>]

Запуск и трассировка программы (режим по умолчанию).

Это единственный режим, позволяющий передавать аргументы в программу. Программа будет запускаться с теми же привилегиями, что и TTD.exe (в качестве администратора). Используйте -attach или -monitor для записи программы с ее обычным набором привилегий.

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

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

Например, используйте для TTD.exe notepad.exe запуска и записи Блокнота. Трассировка остановится при закрытии Блокнота.

Пример использования см. в разделе Примеры использования сценария — запись процесса.

Присоединение к процессу

-attach <PID>

Присоединение к выполняющийся процесс, заданный идентификатором процесса. Используйте TaskManager или служебную программу TaskList для идентификации номеров процессов. Дополнительные сведения см. в разделе Поиск идентификатора процесса.

Например, используйте для TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run запуска и записи процесса с идентификатором и 21440 и сохраните трассировку в MyTraceFile.run.

Убедитесь, что каталог существует (C:\traces в этом примере) перед запуском TTD.exe.

Пример использования см. в разделе Сценарий. Поиск и присоединение к выполняющемся процессу.

Мониторинг процесса

-monitor <Program>

Параметр монитора позволяет отслеживать и отслеживать программу при каждом запуске. Чтобы использовать этот параметр, необходимо указать полный путь к расположению вывода с помощью -out.

Чтобы остановить мониторинг, нажмите клавиши CTRL+C.

Main преимущества мониторинга по сравнению с другими методами:

  • Вы можете запустить целевое приложение обычным способом, не нужно выяснять командную строку, чтобы запустить его.
  • Целевое приложение будет работать с обычными привилегиями. Если вы запускаете приложение непосредственно из ttd.exe оно запустится с повышенными привилегиями, что может изменить поведение программы.
  • Это полезно для автоматизации (используйте скрипт, который отслеживает запуск программы и собирает трассировку).

Параметр -monitor можно указать несколько раз для мониторинга нескольких программ.

Пример использования см. в разделе Примеры использования сценария — процессы мониторинга.

Параметры командной строки

Синтаксис

TTD.exe [options] [mode] [program [<arguments>]]

-? | -help

Отображение справки командной строки.

Режимы

-launch <Program> [<arguments>]

Запуск и трассировка программы (режим по умолчанию).

Это единственный режим, позволяющий передавать аргументы в программу. Параметр -launch должен быть последним параметром TTD в командной строке, за которым следует программа для запуска, и любыми аргументами, которые требуются программе. Если режим не указан, он также будет рассматриваться как запуск. Например TTD.exe -out C:\traces ping.exe msn.com , рассматривается как запуск.

-attach <PID>

Присоединение к выполняющийся процесс, заданный идентификатором процесса. Используйте служебную программу TaskManager или TaskList для идентификации идентификаторов процессов. Дополнительные сведения см. в разделе Поиск идентификатора процесса.

-monitor <Program>

Трассировка программ или служб при каждом запуске (до перезагрузки). Чтобы использовать этот параметр, необходимо указать полный путь к расположению вывода с помощью -out.

Основные параметры командной строки

-out <path>

Укажите имя файла трассировки или каталог. Если каталог, каталог уже должен существовать. Если имя файла, имя файла не должно существовать.

-noUI

Отключает пользовательский интерфейс для ручного управления записью.

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

Снимок экрана: пользовательский интерфейс TTD с маленькой двумя кнопками, отображающий состояние трассировки и кнопку

-accepteula

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

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

Элемент управления трассировки

-stop <process name> | <PID> | all

Остановить трассировку указанного имени процесса, можно указать PID или "all".

-wait <timeout>

Дождитесь завершения всех сеансов трассировки в системе до указанного количества секунд. Укажите -1 для бесконечного ожидания.

-tracingOff

Запускает приложение с отключенной записью трассировки. С помощью флажка пользовательского интерфейса можно включить трассировку после отключения трассировки.

Дополнительные параметры командной строки

-children

Запишите целевой объект, а также все процессы, созданные целевым объектом. Каждый дочерний процесс будет записан в собственный файл трассировки.

-cmdLineFilter "<string>"

Запишите целевой объект, если его командная строка содержит строку. Этот параметр работает только в -monitor режиме . Это полезно в ситуациях, когда аргумент командной строки однозначно идентифицирует интересующий вас процесс. Например, -monitor notepad.exe -cmdLineFilter "specialfile.txt" записи notepad.exe, только если specialfile.txt отображается в командной строке.

-cleanup

Удалите драйвер монитора процесса.

Параметры поведения трассировки

-timestampFilename

Добавляет метку времени в последнюю часть имени файла трассировки. Например, ping_2023-06-17_103116.run.

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

ttd.exe  -out c:\traces -timestampFilename ping.exe msn.com

По умолчанию выполняется последовательная проверка для поиска неиспользуемого файла в выходном каталоге. Если ping.exe записано, средство записи попытается выполнить ping01.run, ping02.run и т. д. пока не будет найдено неиспользуемое имя файла. Для большинства сценариев этого метода именования достаточно. Однако если вы хотите записать одну и ту же программу много раз, алгоритм именования файлов по умолчанию может стать неэффективным при наличии большого количества существующих файлов.

-ring

Трассировка до кольцевого буфера. Размер файла не будет увеличиваться за пределы, заданные параметром -maxFile. Будет сохранена только последняя часть записи, которая соответствует заданному размеру.

-maxFile <size>

Максимальный размер файла трассировки в МБ. В режиме полной трассировки значение по умолчанию — 1024 ГБ, а минимальное значение — 1 МБ. В режиме кольцевого буфера значение по умолчанию — 2048 МБ, минимальное значение — 1 МБ, а максимальное — 32768 МБ.

Значение по умолчанию для круга в памяти в 32-разрядных процессах — 256 МБ.

-maxConcurrentRecordings <count>

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

-numVCpu <number>

Указывает количество виртуальных ЦП, которые будут зарезервированы и использованы при трассировке. Это значение влияет на общий объем памяти, наложенный на память гостевого процесса по TTD. Если не указано, по умолчанию для каждой платформы используется значение 55 для x64/ARM64 и 32 для x86.

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

Если TTD.exe не удается записать или out-файл указывает на имитацию 0 секунд, использование -numVCpu может обеспечить успешное выполнение записи.

-replayCpuSupport <support>

Указывает, какая поддержка ожидается от ЦП, которые будут использоваться для воспроизведения трассировки. Параметр по умолчанию рекомендуется для переноса трассировок между компьютерами, но другие параметры могут использоваться для создания небольших файлов трассировки и записи быстрее (в зависимости от конкретных инструкций, используемых целевой программой).

<support> Значения

Значение Описание
Default Для поддержки ЦП по умолчанию требуется базовая общедоступная поддержка ЦП воспроизведения.
MostConservative Не требует специальной поддержки ЦП воспроизведения. Подходит для трассировок, которые будут воспроизводиться в совершенно другой архитектуре ЦП, например трассировки Intel на ЦП ARM64.
MostAggressive Предполагается, что ЦП воспроизведения будет аналогичным и будет иметь равные или большие возможности, чем ЦП, используемый для записи.
IntelAvxRequired Предполагается, что ЦП воспроизведения будет 64-разрядным ЦП Intel/AMD с поддержкой AVX.
IntelAvx2Required Предполагается, что ЦП воспроизведения будет 64-разрядным ЦП Intel/AMD с поддержкой AVX2.

Сокращение затрат на трассировку

Хотя TTD очень эффективно для выполнения задач (полная трассировка уровня инструкций, закодированная в среднем менее одного байта/инструкции), она по-прежнему имеет заметные издержки при записи. Современные ЦП могут выполнять миллиарды инструкций в секунду, что делает даже один байт/инструкции дорогостоящим. Во многих случаях запись всего процесса не требуется.

Чтобы уменьшить затраты на трассировку, можно использовать следующие параметры:

-module <module name>

Записывайте только указанный модуль (например, comdlg32.dll) и код, который он вызывает. Это может быть сам исполняемый файл или любая библиотека DLL, загруженная исполняемым файлом. Этот параметр можно указать несколько раз для записи нескольких модулей.

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

-recordmode <Automatic | Manual>

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

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

-passThroughExit

Передайте значение выхода гостевого процесса в качестве значения выхода TTD.exe. Это значение доступно пакетным файлам с помощью переменной %ERRORLEVEL% . PowerShell и другие среды командной строки также предлагают механизмы для получения значения завершения процесса.

-onInitCompleteEvent <eventName>

Позволяет сигнализировать о событии при завершении трассировки инициализации.

Примеры использования сценария — запись процесса

Сценарий. Запуск и запись приложения для Windows

В этом сценарии запускается Блокнот и создается трассировка.

  1. -launch Используйте параметр , чтобы запустить Блокнот и записать его.
C:\TTD> TTD.exe -launch notepad.exe
Launching 'notepad.exe'
    Recording process (PID:9960) on trace file: C:\TTD\notepad01.run
notepad.exe(x64) (PID:9960): Process exited with exit code 0 after 12984ms
  Full trace dumped to C:\TTD\notepad01.run
  1. Появится небольшое меню приложения, показывающее, что трассировка включена.

Снимок экрана: пользовательский интерфейс TTD с состоянием трассировки и кнопкой

  1. При закрытии приложения создается файл трассировки. В этом примере notepad01.run.

Сценарий. Запуск и запись приложения Для Windows с переданным параметром

В этом сценарии запускается проверка связи, и адрес для проверки связи передается в качестве параметра.

  1. В этом примере параметр опущен -launch , так как это режим по умолчанию.
C:\TTD> TTD.exe ping.exe msn.com
Launching 'ping.exe msn.com'
    Recording process (PID:24044) on trace file: C:\TTD\ping01.run

Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=22ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Reply from 204.79.197.219: bytes=32 time=25ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118

Ping statistics for 204.79.197.219:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 21ms, Maximum = 25ms, Average = 22ms
ping.exe(x64) (PID:24044): Process exited with exit code 0 after 3390ms
  Full trace dumped to C:\TTD\ping01.run
  1. При закрытии приложения создается файл трассировки. В этом примере ping01.run.

Сценарий. Поиск и подключение к запущенному процессу

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

  1. Запустите целевое приложение в этом примере Блокнота.

  2. Используйте TaskList или другие методы, описанные в , чтобы найти идентификатор процесса. Дополнительные сведения см. в разделе Поиск идентификатора процесса.

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. Используя этот идентификатор процесса, используйте -attach параметр для вложения и записи. При необходимости укажите имя файла трассировки с помощью -out.
C:\TTD> TTD.exe -attach 21440 -out C:\TTD\MyTraceFile.run
Attaching to 21440
    Recording process (PID:21440) on trace file: C:\TTD\MyTraceFile.run
(x64) (PID:21440): Process exited with exit code 0 after 26672ms
  Full trace dumped to C:\TTD\MyTraceFile.run

Сценарий. Запись родительских и его дочерних процессов

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

  1. -children Укажите параметр и имя родительского приложения для записи.

Это пример записи cmd.exe запуска ping.exe в качестве дочернего процесса.

ttd.exe -out d:\traces -children cmd.exe /C ping.exe msn.com

Microsoft (R) TTD 1.01.11
Release: 1.11.0.0
Copyright (C) Microsoft Corporation. All rights reserved.

Launching 'cmd.exe /C ping.exe msn.com'
    Recording process (PID:48200) on trace file: d:\traces\cmd01.run
    Recording process (PID:53724) on trace file: d:\traces\PING01.run

Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117

Ping statistics for 204.79.197.219:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 6ms, Maximum = 7ms, Average = 6ms
(x64) (PID:53724): Process exited with exit code 0 after 3516ms
  Trace family nesting level is 1; Parent process ID is 48200
  Full trace dumped to d:\traces\PING01.run

...

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

Примеры использования сценариев — процессы мониторинга

Сценарий— мониторинг запусков программ и запуск записи

В этом сценарии -monitor параметр используется для записи всех запущенных экземпляров, а также будущих экземпляров notepad.exe, пока система не перезагрузится или ttd.exe не завершится с помощью клавиш CTRL+C. Параметр -out требуется для монитора, и выходная папка должна уже существовать.

  1. Отслеживайте и отслеживайте текущий, а также все будущие экземпляры notepad.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.


The Process Launch Monitor driver is not installed
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(15904)        From parent process explorer.exe(8440)
    Recording process (PID:15904) on trace file: C:\TTD\notepad01.run
Recording process Notepad.exe(19920)        From parent process explorer.exe(8440)
    Recording process (PID:19920) on trace file: C:\TTD\notepad02.run
(x64) (PID:19920): Process exited with exit code 0 after 1281ms
  Full trace dumped to C:\TTD\notepad02.run

(x64) (PID:15904): Process exited with exit code 0 after 30719ms
  Full trace dumped to C:\TTD\notepad01.run

  1. В этом примере после начала трассировки были загружены два экземпляра notepad.exe. После записи интересующего действия в командной строке в командной строке был использован клавиши CTRL+C, чтобы остановить запись.

Сценарий. Мониторинг двух программ для запуска программ

В этом сценарии -monitor параметр используется для мониторинга и записи двух приложений.

  1. Отслеживайте и отслеживайте текущий, а также все будущие экземпляры notepad.exe и ping.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe -monitor ping.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.


Successfully uninstalled the Process Launch Monitor driver
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(17972)        From parent process explorer.exe(8440)
    Recording process (PID:17972) on trace file: C:\TTD\Notepad01.run
Tracking process svchost.exe(7824)        From parent process services.exe(1292)
Tracking process sppsvc.exe(10376)        From parent process services.exe(1292)
Tracking process ClipUp.exe(15108)        From parent process svchost.exe(7824)
Tracking process ClipUp.exe(21180)        From parent process ClipUp.exe(15108)
Tracking process consent.exe(24280)        From parent process svchost.exe(892)
Tracking process ctfmon.exe(24508)        From parent process svchost.exe(5064)
Tracking process wt.exe(10768)        From parent process explorer.exe(8440)
Tracking process WindowsTerminal.exe(23296)        From parent process wt.exe(10768)
Tracking process OpenConsole.exe(6816)        From parent process WindowsTerminal.exe(23296)
Tracking process powershell.exe(15956)        From parent process WindowsTerminal.exe(23296)
Tracking process git.exe(3656)        From parent process powershell.exe(15956)
Tracking process git.exe(1928)        From parent process git.exe(3656)
Tracking process git.exe(20312)        From parent process powershell.exe(15956)
Tracking process git.exe(5712)        From parent process git.exe(20312)
Tracking process csc.exe(16144)        From parent process powershell.exe(15956)
Tracking process cvtres.exe(19488)        From parent process csc.exe(16144)
Recording process PING.EXE(21468)        From parent process powershell.exe(15956)
    Recording process (PID:21468) on trace file: C:\TTD\PING01.run
(x64) (PID:21468): Process exited with exit code 1 after 234ms
  Full trace dumped to C:\TTD\PING01.run


Tracking process Teams.exe(10060)        From parent process Teams.exe(2404)
Tracking process cmd.exe(21796)        From parent process powershell.exe(15956)
Recording process PING.EXE(364)        From parent process cmd.exe(21796)
    Recording process (PID:364) on trace file: C:\TTD\PING02.run
(x64) (PID:364): Process exited with exit code 1 after 234ms
  Full trace dumped to C:\TTD\PING02.run
  1. В этом примере notepad.exe, а затем ping.exe были загружены после начала трассировки. После записи интересующего действия в командной строке в командной строке был использован клавиши CTRL+C, чтобы остановить запись.

Сценарий. Остановка записи во втором окне

В этом сценарии было зафиксировано интересующее действие, и вся запись останавливается с помощью -stop all. Для выполнения параметра используется второе командное -stop all окно.

C:\TTD> TTD.exe -stop all
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.

Full trace written to 'C:\TTD\Notepad01.run'

Сценарий. Очистка драйвера монитора

В этом сценарии -cleanup параметр используется для очистки драйвера монитора после завершения записи.

C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver

Дополнительные примеры командной строки

В этой таблице приведены некоторые дополнительные примеры использования командной строки. Дополнительные сведения о иллюстрированных параметрах см. в разделе Параметры командной строки .

Сценарий Get-Help Описание
Присоединение к процессу, но запись еще не начинается Ttd.exe -tracingoff notepad.exe Запускает Блокнот с отключенной записью. Запись может быть запущена в любое время через пользовательский интерфейс.
Фильтрация по командной строке Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe Записывайте notepad.exe, но только в том случае, если foo.txt находится в командной строке при запуске, помещая выходные данные в текущий каталог.
Запись звонка Ttd.exe -ring -attach 1234 Записывает PID 1234 в файл трассировки объемом до 2 ГБ, помещая выходные данные в текущий каталог. Старое содержимое в файле трассировки перезаписывается по мере необходимости, чтобы сохранить максимальный размер файла.

Используйте -maxfile для изменения максимального размера.
Ограничение размера файла трассировки Ttd.exe -maxfile 4096 notepad.exe Запись notepad.exe, пока файл трассировки не достигнет 4 ГБ, помещая выходные данные в текущий каталог.
Ограничение количества записей, которые происходят одновременно Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe В некоторых случаях запись требует много ресурсов ЦП.
Сокращение использования памяти в целевом процессе Ttd.exe -numvcpu 8 -monitor w3wp.exe Некоторые процессы, например w3wp.exe, устанавливают небольшую квоту на объем памяти, который он может использовать. Если ttd.exe не удается начать запись, используйте для -numvcpu уменьшения количества выделенных TTD виртуальных ЦП. Попробуйте этот параметр, только если ttd.exe не удается выполнить запись с помощью других средств.
Выбор между переносимостью трассировки и скоростью записи или размером файла трассировки Ttd.exe -replaycpusupport mostaggressive notepad.exe По умолчанию TTD создает файлы трассировки, переносимые на широком спектре оборудования. Выбор "mostaggresive" указывает TTD, что можно записать трассировку, которую можно воспроизвести только на ЦП с теми же возможностями, что и компьютер, записыввший трассировку. В некоторых случаях это может значительно повысить скорость записи и размер файла трассировки.

Примеры командной строки службы автоматизации

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

Сценарий Get-Help Описание
Отключение пользовательского интерфейса Ttd.exe -noui -accepteula notepad.exe Записывайте notepad.exe, помещая выходные данные в текущий каталог без отображения пользовательского интерфейса.
Ожидание программного запуска средства записи Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe Создайте событие Win32 с именем "ttd_notepad" и запустите notepad.exe. TTD будет сигнализировать "ttd_notepad" при инициализации записи. Служба автоматизации может дождаться события, прежде чем продолжить работу с поведением, которое она хочет записать.
Сохранение кода выхода целевого объекта Ttd.exe -accepteula -passthroughexit ping.exe msn.com Записывает ping.exe, помещая выходные данные в текущий каталог. код выхода Ttd.exe будет таким же, как и код выхода ping.exe.
Ожидание завершения записи Ttd.exe -accepteula -wait 30 После остановки записи подождите до 30 секунд, пока TTD завершит запись файла трассировки на диск. Используйте -wait -1 для неограниченного ожидания.

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

Работа с созданным файлом трассировки

Сведения о работе с трассировкой и инструкции по воспроизведению трассировок перемещения по времени и переходу вперед и назад во времени см. в разделе Отладка перемещения по времени — воспроизведение трассировки.

Советы по работе с файлами трассировки

  • При совместном использовании трассировок с другими пользователями необходимо предоставить общий доступ только к файлу .run. Файл индекса (IDX) может быть размером с RUN-файл и автоматически создается при загрузке файла трассировки WinDbg.
  • При совместной работе с другими пользователями передайте все соответствующие позиции трассировки, связанные с проблемой. Участники совместной работы могут использовать !tt x:y команду для перехода к этой точной точке во времени в выполнении кода. Диапазоны временных позиций можно включить в описания ошибок, чтобы отслеживать возможные проблемы.
  • При сообщении о проблеме с TTD, если вы предоставляете RUN-файл, также укажите out-файл. Это позволяет подтвердить правильное выполнение процесса записи.
  • Файлы трассировки (.run) хорошо сжимаются.

Устранение неполадок TTD.exe

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

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

Microsoft (R) TTDRecord 1.01.11
Release: 1.11.47.0
Copyright (C) Microsoft Corporation. All rights reserved.


Initializing Time Travel Debugging for Attach to 9916
Time: 05/08/2023 17:07:15
OS:10.0.25314 EDITION:x64

SessionID: 008F918C-B8A7-4C4E-B91B-34CFC953C501

   (TTD::ManageTTDTrace:2725)
Running 
   (TTD::StartGuestProcess:1512)
Group tracing GUID: B84DF180-DA54-46E5-9019-73690C689979

Running "C:\WINDOWS\SYSTEM32\TTDInject.exe" /duration 1 /InjectMode LoaderForCombinedRecording /ClientParams "37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0" /RecordScenario 268435458 /attach 9916 -TraceFileHandle 4f8 -GuestEventHandle 380 -ClientEventHandle 384 -ActiveEventHandle 4f4 -MutexHandle 46c -CommunicationBufferHandle 3c0 -SharedSequenceMutexHandle 3b8 -SharedSequenceBufferHandle 330 /TelemetryFeatureSessionId "008F918C-B8A7-4C4E-B91B-34CFC953C501"
   (TTD::StartGuestProcess:1955)
Microsoft (R) TTDInject 1.01.11
Release: 1.11.27.0
Copyright (C) Microsoft Corporation. All rights reserved.

TTDLoader Params:
 LauncherDll = TTDLoader
 ClientDll   = TTDRecordCPU
 ClientEntry = InitializeNirvanaClient
 ClientParams= 37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0
 Attach
WaitForMain is off
Allocated processors:55, running threads:2.
Loader TTDLoader.dll injected at 0x00007FFF423B0000 0xc000 -- .reload  TTDLoader.dll=0x00007FFF423B0000,0xc000

Injection by thread is complete.
RecordingEngine initialization successful.
RecordVcpu initialization successful.
Loader initialization successful.
Guest Process is x64 binary.
Tracing started at: Tue May  9 00:07:16 2023 (UTC) Mon May  8 17:07:16 2023 (Local)

Guest process exited with exit code 0
Simulation time of '' (x64): 18781ms.
Tracing completed at: Tue May  9 00:07:34 2023 (UTC) Mon May  8 17:07:34 2023 (Local)

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

  • Некоторые сообщения об ошибках отображаются только в out-файле и могут использоваться для определения особенностей сбоя.
  • Указание времени начала или остановки записи
  • Как долго длился сеанс записи (время имитации)
  • Является ли запись запуском (с помощью командной строки) или присоединением записи
  • Версия ОС

См. также:

Отладка по времени — обзор

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

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