Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, когда и как использовать утилиту командной строки TTD.exe для записи трассировок TTD (отладка с перемещением во времени). Служебная программа командной строки TTD.exe позволяет записывать приложение или выполнение процесса, сохранять его в файл трассировки и воспроизводить его в WinDbg для диагностики проблем с выполнением кода.
Из этой статьи вы узнаете следующее.
- Когда использовать TTD.exe в сравнении с пользовательским интерфейсом WinDbg
- Установка и настройка TTD.exe
- Три способа записи трассировок (запуск, подключение, мониторинг)
- Параметры командной строки и расширенные сценарии
Когда следует использовать служебную программу командной строки TTD.exe
Отладка перемещения по времени (TTD) позволяет записывать выполнение кода приложения или процесса и сохранять его в файле трассировки. Вы можете воспроизвести файл в отладчике Windows, чтобы найти проблему с выполнением кода.
Для многих сценариев проще всего использовать TTD для записи приложения или процесса непосредственно из пользовательского интерфейса WinDbg. Если вы не знакомы с Отладкой временных путешествий, начните с Отладка временных путешествий – Обзор, чтобы узнать основы с помощью интерфейса WinDbg.
У вас могут быть сценарии, в которых требуется только средство записи командной строки TTD: запись на компьютере без установки отладчика, расширенных сценариев записи, автоматизации тестирования и т. д. В этих сценариях можно установить только средство записи командной строки TTD по URL-адресу.
Запись TTD влияет на записанный процесс
Запись TTD — это инвазивная технология. Вы заметите замедление выполнения приложения или процесса в пределах от 5 до 20 раз или более во время записи, в зависимости от приложения и параметров записи, которые вы выберете.
Созданные файлы трассировки растут со временем и могут занять значительное место в хранилище. Чтобы выполнить трассировку в течение короткого периода времени, захватив интересующие действия программы, закройте трассировку как можно скорее.
После подключения TTD к процессу он не может отсоединиться самостоятельно. Закройте приложение или завершите процесс после завершения записи TTD. Для системных процессов это действие требует перезагрузки ОС.
Записи TTD могут содержать личные или связанные с безопасностью сведения
Это важно
Записи TTD захватывают содержимое памяти и могут содержать личные или связанные с безопасностью сведения, включая, но не обязательно ограничены путями к файлам, реестром, памятью или содержимым файла. Точные сведения зависят от целевой активности процесса во время его записи.
Скачайте и установите служебную программу командной строки TTD.exe (предпочтительный метод)
Скачайте утилиту командной строки TTD с https://aka.ms/ttd/download.
Выберите «Установить», после чего TTD будет загружен и установлен. Команда TTD добавляется в системный путь и доступна для использования в командной строке после завершения установки.
Совет
После установки откройте новую командную строку и введите ttd.exe -help , чтобы убедиться, что установка выполнена успешно.
При возникновении трудностей с установкой, см. раздел "Устранение проблем с установкой с помощью инсталлятора приложений".
На некоторых компьютерах может потребоваться установить установщик приложений Майкрософт для 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
Трассировку можно записать тремя способами:
| Метод | Лучше всего подходит для | Пример сценария |
|---|---|---|
| Запуск | Запуск нового процесса с определенными аргументами | Запись утилиты командной строки, такой как ping.exe |
| Прикреплять | Запись уже запущенного процесса | Отладка службы или длительного приложения |
| Монитор | Автоматическая запись при каждом запуске процесса | Фиксация периодических проблем или проблем с запуском |
Как только вы начнете записывать процесс, вызовите проблему, которую необходимо отладить. Вы можете открыть проблемный файл или выбрать определенную кнопку в приложении, чтобы вызвать событие интереса. Когда приложение, запись которого ведется, завершается либо естественным образом, либо в результате сбоя, файл трассировки окончательно формируется.
Совет
Для записи трассировок TTD требуются права администратора. Как правило, вы запускаете ttd.exe из командной строки администратора.
Дополнительные сведения о записи трассировки перемещения по времени с помощью WinDbg см. в статье "Отладка перемещения по времени" — запись трассировки.
Запуск процесса
-launch <Program> [<arguments>]
Запуск и трассировка программы (режим по умолчанию).
Этот режим является единственным режимом, который позволяет передавать аргументы программе. Программа запускается с теми же привилегиями, что и TTD.exe (как администратор). Используйте -attach или -monitor, чтобы записать программу с обычным набором привилегий.
Включение -launch является необязательным, но его можно использовать для ясности.
Первый нераспознанный аргумент, который не начинается с - или / считается исполняемым путем для запуска, и любые последующие аргументы считаются аргументами для этой программы.
Например, используйте TTD.exe notepad.exe для запуска и записи Блокнота. Трассировка останавливается при закрытии Блокнота.
Смотрите Примеры использования сценария - запись процесса.
Присоединение к процессу
-attach <PID>
Присоединение к работающему процессу, указанному идентификатором процесса. Используйте диспетчер задач или служебную программу 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>
Присоединение к работающему процессу, указанному идентификатором процесса. Используйте служебную программу диспетчера задач или списка задач для идентификации идентификаторов процессов. Дополнительные сведения см. в разделе "Поиск идентификатора процесса".
-monitor <Program>
Трассировка программ или служб при каждом запуске (до перезагрузки). Чтобы использовать этот параметр, необходимо указать полный путь к выходному расположению -out.
Основные параметры командной строки
-out <path>
Укажите имя файла трассировки или каталог. Если указать каталог, он уже должен существовать. Если указать имя файла, оно не должно существовать.
-noUI
Отключает пользовательский интерфейс для ручного управления записью. Используйте этот параметр для сценариев автоматизации , в которых не требуется интерактивный контроль.
Если этот параметр не выбран, при активной записи отображается небольшой пользовательский интерфейс:
Пользовательский интерфейс предоставляет два элемента управления:
- Отключение трассировки - Останавливает трассировку, и приложение продолжает работать
- Выход из приложения — закрывает приложение и останавливает трассировку
-accepteula
Используйте этот параметр, чтобы принять лицензионное соглашение с пользователем EULA. Используйте этот параметр в сценариях автоматизации после проверки и принятия лицензионного соглашения.
TTD отображает EULA при первом запуске. Введите Y или N, чтобы принять EULA. После принятия eULA больше не отображается при запуске. Если вы не принимаете EULA, TTD завершает работу и отображает EULA при следующем запуске.
Управление трассировкой
-stop <process name> | <PID> | all
Остановите трассировку указанного имени процесса, PID или "all".
-wait <timeout>
Подождите до указанного количества секунд для завершения всех сеансов трассировки в системе. Укажите -1, чтобы ждать бесконечно.
-tracingOff
Запускает приложение без включения записи трассировки. Вы можете использовать флажок в пользовательском интерфейсе, чтобы снова включить трассировку после её отключения.
Дополнительные параметры командной строки
-children
Запишите целевой процесс и все процессы, созданные целевым объектом. Каждый дочерний процесс записывается в собственный файл трассировки.
-cmdLineFilter "<string>"
Запишите отслеживаемый процесс, если в командной строке содержится искомая строка. Этот параметр работает только с -monitor режимом. Полезно, когда аргумент командной строки однозначно идентифицирует интересующий вас процесс. Например, 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 МБ, а максимальное значение — 32 768 МБ.
Значение по умолчанию для кольца в памяти для 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
В этом сценарии вы запускаете Блокнот и создаете трассировку.
-
-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
- Появится небольшое меню приложения, показывающее, что трассировка включена.
- При закрытии приложения он создает файл трассировки. В этом примере файл трассировки называется Notepad01.run.
Сценарий. Запуск и запись приложения Windows с переданным параметром
В этом сценарии вы запускаете пинг и передаете адрес в виде параметра.
- В этом примере вы опустите
-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
- При закрытии приложения он создает файл трассировки. В этом примере файл трассировки называется ping01.run.
Сценарий - Поиск и присоединение к запущенному процессу
В этом сценарии вы запустите Блокнот, найдите его идентификатор процесса и создадите трассировку, подключив его к работающему приложению.
Запустите целевое приложение, в этом примере, Блокнот.
Используйте TaskList или другие методы для поиска идентификатора процесса. Дополнительные сведения см. в разделе "Поиск идентификатора процесса".
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- Используйте идентификатор процесса с опцией
-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
Сценарий: Запись родительского процесса и его дочерних процессов
В этом сценарии вы записываете родительский процесс и его дочерние процессы. Так как некоторые приложения используют множество дочерних процессов, файл трассировки семьи, содержащий дочерние элементы, может стать довольно большим.
-
-childrenУкажите параметр и имя родительского приложения для записи.
В этом примере записывается запуск cmd.exeping.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
...
- Создаются несколько файлов трассировки: один для родительского процесса и файла трассировки для каждого дочернего процесса. WinDbg открывает только один файл трассировки за раз, поэтому необходимо запускать отдельные экземпляры WinDbg для каждой трассировки, если вы хотите отладить их одновременно.
Примеры использования сценария — процессы мониторинга
Сценарий— мониторинг запуска и записи программ
В этом сценарии используйте -monitor параметр для записи всех запущенных экземпляров и будущих экземпляров notepad.exe до перезагрузки системы или выхода ttd.exe с помощью CTRL+C. Вам нужен параметр для монитора -out , и папка вывода уже должна существовать.
- Отслеживайте и регистрируйте текущие и будущие экземпляры 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
- В этом примере вы запускаете две версии notepad.exe после начала трассировки. При захвате интересующего действия используйте CTRL-C в командной строке, чтобы остановить запись.
Сценарий - мониторинг запуска двух программ
В этом сценарии используйте -monitor параметр для мониторинга и записи двух приложений.
- Выполняйте мониторинг и отслеживайте текущие и будущие экземпляры 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
- В этом примере вы загружаете notepad.exe, а затем ping.exe после запуска трассировки. При захвате интересующего действия используйте CTRL-C в командной строке, чтобы остановить запись.
Советы по работе с файлами трассировки
- При обмене трассировками с другими пользователями делитесь только файлом .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 и могут помочь определить особенности сбоя.
- Указание текущего времени на настенных часах, когда начиналась и заканчивалась запись
- Сколько времени длилось сеанс записи (время имитации)
- Указывает, является ли запись запуском (с командной строкой) или присоединением записи
- Версия ОС
Связанный контент
- Приступая к работе: Отладка Time Travel — обзор и изучение основ TTD.
- Запись с помощью WinDbg: Отладка с перемещением во времени — запись трассировки — используйте пользовательский интерфейс WinDbg для записи трассировок.
- Анализ трассировок: отладка перемещения по времени — воспроизведение трассировки — отладка записанных трассировок в WinDbg.
- Устранение неполадок: Отладка с перемещением во времени — решение неполадок - Решение распространенных проблем записи.