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


Отладка временных путешествий — служебная программа командной строки 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 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.

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

Например, использование см. в разделе "Сценарий" — поиск и присоединение к запущенному процессу.

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

-monitor <Program>

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

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

Основными преимуществами мониторинга по сравнению с другими методами являются:

  • Вы можете запустить целевое приложение обычным способом, не нужно выяснить командную строку, чтобы запустить ее.
  • Целевое приложение будет работать со своими обычными привилегиями. Если запустить приложение непосредственно из 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

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

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

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

-accepteula

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

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

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

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

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

-wait <timeout>

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

-tracingOff

Запускает приложение с записью трассировки. Установите флажок пользовательского интерфейса, чтобы включить трассировку после отключения.

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

-children

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

-cmdLineFilter "<string>"

Запишите целевой объект, если его командная строка содержит строку. Этот параметр работает только с -monitor режимом. Это полезно для ситуаций, когда аргумент командной строки однозначно идентифицирует интересующий вас процесс. Например, записи notepad.exe только в том случае, -monitor notepad.exe -cmdLineFilter "specialfile.txt" если 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 Предполагается, что ЦП воспроизведения будет intel/AMD 64-разрядным ЦП, поддерживающим AVX.
IntelAvx2Required Предполагается, что ЦП воспроизведения будет intel/AMD 64-разрядной ЦП, поддерживающий 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

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

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

Сценарий Команда Description
Присоединение к процессу, но пока не запускает запись 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.

Сценарий Команда Description
Отключение пользовательского интерфейса 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 параметр, чтобы убедиться, что автоматизация не заблокирована диалоговым окном подтверждения EULA.

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

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

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

  • При совместном использовании трассировок с другими пользователями необходимо предоставить общий доступ только к файлу 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 и могут использоваться для определения особенностей сбоя.
  • Указание времени начала записи или остановки
  • Сколько времени длилось сеанс записи (время имитации)
  • Указывает, является ли запись запуском (с командной строкой) или присоединением записи
  • Версия ОС

См. также

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

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

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