本文介绍如何使用 TTD.exe 命令行实用工具记录时间旅行调试(TTD)跟踪的时间和方法。 TTD.exe 命令行实用工具允许记录应用或进程执行、将其保存到跟踪文件,并在 WinDbg 中重播它以诊断代码执行问题。
本文内容:
- 何时使用 TTD.exe 与 WinDbg UI
- 如何安装和配置 TTD.exe
- 记录跟踪的三种方法(启动、挂接、监控)
- 命令行选项和高级方案
何时使用 TTD.exe 命令行实用工具
利用时间旅行调试(TTD),可以记录应用或进程的代码执行,并将其保存在跟踪文件中。 可以在 Windows 调试器中播放该文件,以查找代码执行问题。
对于许多方案,使用 TTD 记录应用或进程的最简单方法是直接从 WinDbg UI。 如果你不熟悉时间旅行调试,请从 时间旅行调试开始 - 概述 ,了解如何使用 WinDbg 接口了解基础知识。
你可能的方案中只需要 TTD 命令行录制器:在电脑上录制,而无需安装调试器、高级录制方案、测试自动化等。 在这些方案中,只需通过 URL 安装 TTD 命令行记录器即可。
TTD 录制会影响录制的进程
TTD 录音是一种侵入性技术。 在录制时,您会注意到应用程序或进程的运行速度减慢到原始速度的 5 倍至 20 倍甚至更慢,具体取决于您选择的应用程序和录制选项。
创建的跟踪文件会随着时间推移而增长,并可能占用大量存储空间。 在最短时间内跟踪工作,捕获感兴趣的程序活动,然后尽快关闭跟踪。
TTD 附加到进程后,无法删除自身。 关闭应用或在 TTD 录制完成后结束该过程。 对于系统关键进程,此作需要重新启动 OS。
TTD 录制可能包含个人身份或安全相关信息
重要
TTD 录制捕获内存内容,可能包含个人身份或安全相关信息,包括但不限于文件路径、注册表、内存或文件内容。 确切信息取决于记录目标进程活动。
下载并安装 TTD.exe 命令行实用工具(首选方法)
从 https://aka.ms/ttd/download. 下载 TTD 命令行实用工具。
选择 安装,TTD 将下载并安装。 TTD 命令将添加到系统路径,可在安装完成后在命令提示符处使用。
提示
安装后,打开新的命令提示符并键入 ttd.exe -help 以验证安装是否成功。
如果在安装时遇到问题,请参阅 “排查应用安装程序”文件的安装问题。
在某些电脑上,可能需要安装 适用于 Windows 10 的 Microsoft 应用安装程序。 它在 Windows 中的 Microsoft 应用商店应用中可用。 从 Windows 10 1809 开始,应用安装程序支持Windows 程序包管理器。
下载并安装 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 位进程,可以将其删除(并且可以在 robocopy 命令中添加/xd x86,以避免一开始复制它)。 ARM64 版本没有任何子目录。
仅当想要使用 UI 控制录制时,才需要 TTDRecordUI.dll 文件。 如果不希望 UI,可以删除此文件。
下载并手动提取 TTD.exe 命令行实用工具包
如果不想安装 TTD 命令行实用工具,可以下载包并手动提取文件。 以下 PowerShell 脚本:
- 从 https://aka.ms/ttd/download中获取当前版本的 TTD 的 URL。
- 下载 MSIX 捆绑包。
- 从 MSIX 捆绑包中提取所需架构的 MSIX。
- 从 MSIX 中提取 TTD 二进制文件。
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>
附加到进程 ID 指定的正在运行的进程。 使用任务管理器或 TaskList 实用工具标识进程编号。 有关详细信息,请参阅 查找进程 ID。
例如,用于 TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run 启动并记录 ID 为 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>
附加到进程 ID 指定的正在运行的进程。 使用任务管理器或 TaskList 实用工具标识进程 ID。 有关详细信息,请参阅 查找进程 ID。
-monitor <Program>
启动程序或服务时进行跟踪(直到重新启动)。 若要使用此选项,必须使用 指定输出位置 -out的完整路径。
基本命令行选项
-out <path>
指定跟踪文件名或目录。 如果指定目录,则它必须已存在。 如果指定文件名,则文件名不得存在。
-noUI
禁用手动控制录制的 UI。 对于不需要交互式控件的自动化方案,请使用此选项。
如果未选择此选项,录制处于活动状态时会显示一个小 UI:
UI 提供两个控件:
- 跟踪关闭 - 停止跟踪,应用继续运行
- 退出应用 - 关闭应用并停止跟踪
-accepteula
使用此选项接受 EULA 用户许可协议。 查看并接受 EULA 后,在自动化方案中使用此选项。
TTD 在首次运行时显示最终用户许可协议。 键入 Y 或 N 以接受 EULA。 接受后,EULA 在启动时不再显示。 如果您不接受 EULA,TTD 将退出,并在下次运行时显示 EULA。
跟踪控件
-stop <process name> | <PID> | all
停止跟踪指定的进程名称、PID 或“all”。
-wait <timeout>
在系统上等待所有跟踪会话结束,最长等待时间为指定的秒数。 指定 -1 以无限等待。
-tracingOff
启动应用程序并关闭跟踪记录。 可以使用 UI 复选框在关闭跟踪后重新打开跟踪。
其他命令行选项
-children
记录目标进程和目标创建的任何进程。 每个子进程都记录到其自己的跟踪文件中。
-cmdLineFilter "<string>"
如果目标进程命令行包含字符串,则记录目标进程。 此选项仅适用于 -monitor 模式。 当命令行参数唯一标识你感兴趣的过程时,它很有用。 例如, -monitor notepad.exe -cmdLineFilter "specialfile.txt" 仅当specialfile.txt出现在命令行上时,记录才会notepad.exe。
-cleanup
卸载进程监视器驱动程序。
跟踪行为设置
-timestampFilename
将时间戳添加到跟踪文件名的最后一部分。 例如,ping_2023-06-17_103116.run。
若要使用文件名中的时间戳进行记录 ping.exe ,请使用此命令。
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
默认情况下,录制器按顺序扫描输出目录以查找未使用的文件名。 如果录制ping.exe,记录器会尝试ping01.runping02.run等,直到找到未使用的文件名。 对于大多数方案,此命名方法就足够了。 但是,如果要多次记录同一程序,则当存在大量现有文件时,默认文件命名算法可能会变得效率低下。
-ring
跟踪到环形缓冲区。 文件大小不会超出指定的 -maxFile限制。 仅保存符合给定大小的录制的最后一部分。
-maxFile <size>
跟踪文件的最大大小(以 MB 为单位)。 在完整跟踪模式下,默认值为 1,024 GB,最小值为 1 MB。 在环形缓冲区模式下,默认值为 2,048 MB,最小值为 1 MB,最大值为 32,768 MB。
32 位进程内存中环的默认值为 256 MB。
-maxConcurrentRecordings <count>
可在任意一个时间点进行的最大录制次数。 如果未指定此值,可以同时发生无限数量的录制。
-numVCpu <number>
指定在跟踪时要保留和使用的虚拟 CPU 的数量。 此值会影响由 TTD 在来宾进程内存上放置的总内存开销。 如果未指定此值,则每个平台的默认值为 55(对于 x64/ARM64)和 32(对于 x86)。
更改此设置以 仅 当内存不足时限制内存影响。 降低 numVCpu 值可能会严重影响跟踪的性能,并且只应当作为内存使用问题的应对方法。
如果 TTD.exe 无法录制,或者 .out 文件指示模拟 0 秒,则使用 -numVCpu 可能会使录制成功。
-replayCpuSupport <support>
指定期望重播跟踪的 CPU 提供的支持。 建议使用默认设置,以便在计算机之间移植跟踪,但你可以使用其他选项更快地生成较小的跟踪文件和记录,具体取决于目标程序使用的特定说明。
<support> 值
| 值 | 说明 |
|---|---|
Default |
默认 CPU 支持,只需在重播 CPU 中提供基本可用的支持。 |
MostConservative |
在重播 CPU 中不需要特殊支持。 足以用于在完全不同的 CPU 体系结构上重播的跟踪记录,例如在 ARM64 处理器上的 Intel 跟踪记录。 |
MostAggressive |
假设回放 CPU 与用于记录的 CPU 相似,并且具有相同或更高的性能。 |
IntelAvxRequired |
假设重播 CPU 是支持 AVX 的 Intel/AMD 64 位 CPU。 |
IntelAvx2Required |
假设重播 CPU 是支持 AVX2 的 Intel/AMD 64 位 CPU。 |
减少跟踪开销
虽然 TTD 对于它的作用非常高效(平均编码为小于一个字节/指令的完整指令级别跟踪),但录制时仍会产生明显的开销。 新式 CPU 每秒可以执行数十亿个指令,甚至使一个字节/指令成本高昂。 在许多情况下,录制整个过程并不是必需的。
以下选项可用于减少跟踪开销:
-module <module name>
仅记录指定的模块(如comdlg32.dll)及其调用的代码。 这可以是可执行文件本身或可执行文件加载的任何 DLL。 可以多次指定此选项来记录多个模块。
使用此选项时,目标进程以全速运行,直到执行指定模块(s)中的代码。 然后,TTD 将记录进程,直到执行离开指定的模块(s),此时录制处于关闭状态,目标将返回全速。 由于打开/关闭录制成本高昂,因此当指定模块调用过程中的其他模块时,TTD 将保持录制状态。
-recordmode <Automatic | Manual>
通常,只要 TTD 在目标进程中插入自身(“自动”模式,默认值),就会开始录制。 如果程序使用 TTD 的进程内录制 API 来控制录制时间,则可以使用“手动”模式以全速运行,直到程序调用 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 应用
在此方案中,将启动 ping 并将地址作为参数传递给 ping。
- 在此示例中,省略该
-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。
方案 - 查找并附加到正在运行的进程
在此场景中,您将启动记事本,查找其进程 ID,然后通过附加到正在运行的应用程序来创建跟踪。
启动目标应用,在此示例中是记事本。
使用 TaskList 或其他方法查找进程 ID。 有关详细信息,请参阅 查找进程 ID。
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- 将进程 ID 与用于附加和记录的选项一起使用
-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 停止录制。
有关使用跟踪文件的提示
- 与他人共享跟踪时,仅共享 .run 文件。 索引文件 (.idx) 可以像 .run 文件一样大,并在 WinDbg 加载跟踪文件时自动创建。
- 与他人协作时,共享与问题相关的任何相关跟踪位置。 协作者可以使用
!tt x:y命令移动到代码执行中的确切时间点。 可以在 bug 说明中包含时间位置范围,以跟踪可能出现的问题的位置。 - 报告 TTD 问题时,如果提供 .run 文件,也提供 .out 文件。 此添加允许确认录制过程正常工作。
- 跟踪文件 (.run) 压缩良好。
排查 TTD.exe 录制问题
可能会发生跟踪文件错误。 有关详细信息,请参阅 时间旅行调试 - 故障排除。
可以使用 .out 文件进行故障排除。 示例 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 文件中,可能有助于确定失败的具体信息。
- 录音开始和结束的实际时钟时间指示
- 录制会话持续的时间(模拟时间)
- 录制是启动(带有命令行)还是附加录制
- OS 版本
相关内容
- 入门: 时间旅行调试 - 概述 - 了解 TTD 的基础知识。
- 使用 WinDbg 进行录制: 时间旅行调试 - 记录踪迹 - 使用 WinDbg UI 记录踪迹。
- 分析跟踪记录:时间旅行调试 - 重播跟踪记录 - 在 WinDbg 中调试您录制的跟踪记录。
- 故障排除: 时间旅行调试 - 故障诊断 - 解决常见录制问题。