Отладка временных путешествий — служебная программа командной строки TTD.exe
В этой статье описывается, когда и как использовать служебную программу командной строки TTD.exe для записи трассировки.
Когда следует использовать служебную программу командной строки TTD.exe
Отладка перемещения по времени (TTD) позволяет записывать выполнение кода приложения или процесса и сохранять его в файле трассировки. Файл можно воспроизвести обратно в отладчике Windows, чтобы найти проблему с выполнением кода.
Для многих сценариев проще всего использовать TTD для записи приложения или процесса непосредственно из пользовательского интерфейса WinDbg. Сведения об отладке перемещения по времени с помощью пользовательского интерфейса WinDbg см. в разделе "Отладка перемещения по времени" — обзор.
У вас могут быть сценарии, в которых требуется только средство записи командной строки TTD: запись на компьютере без установки отладчика, расширенных сценариев записи, автоматизации тестирования и т. д. В этих сценариях можно установить только средство записи командной строки TTD с помощью URL-адреса.
Запись TTD влияет на записанный процесс
Запись TTD — это инвазивная технология. Вы заметите в любом месте от 5x-20x или более замедление выполнения приложения или процесса во время записи в зависимости от приложения и выбранных параметров записи.
Созданные файлы трассировки растут со временем и могут занять значительное место в хранилище. Чтобы выполнить трассировку в течение короткого периода времени, захватив интересующие программы действия программы, а затем закройте трассировку как можно скорее.
После присоединения TTD к процессу его невозможно удалить. Закройте приложение или завершите процесс после завершения записи TTD. Для системных критически важных процессов это потребует перезагрузки ОС.
Записи TTD могут содержать личные или связанные с безопасностью сведения
Записи TTD фиксируют содержимое памяти и могут содержать личную или связанную с безопасностью информацию, включая, но не обязательно ограничивается путями к файлам, реестром, памятью или содержимым файла. Точные сведения зависят от целевого действия процесса во время записи.
Как скачать и установить служебную программу командной строки TTD.exe (предпочтительный метод)
Скачайте служебную программу командной строки TTD здесь: https://aka.ms/ttd/download
Выберите
При возникновении проблем с установкой см . раздел "Устранение неполадок с установкой в файле установщика приложений".
На некоторых компьютерах может потребоваться установить Установщик приложений (Майкрософт) для 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 закрывает приложение, которое также останавливает трассировку.
-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
В этом сценарии блокнот запускается и создается трассировка.
-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.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
...
- Создаются несколько файлов трассировки: один для родительского процесса и файла трассировки для каждого дочернего процесса. 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, использовался в командной строке для остановки записи.
Сценарий. Остановка записи во втором окне
В этом сценарии действие, интересующее вас, было записано, и все записи остановлены с помощью -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 и могут использоваться для определения особенностей сбоя.
- Указание времени начала записи или остановки
- Сколько времени длилось сеанс записи (время имитации)
- Указывает, является ли запись запуском (с командной строкой) или присоединением записи
- Версия ОС
См. также
Отладка временных путешествий — обзор
Отладка перемещения по времени — запись трассировки
Отладка перемещения по времени — воспроизведение трассировки