时间旅行调试发行说明

带有时钟的时间旅行调试徽标。

本主题提供有关时间旅行调试中的新增功能的信息。

1.11.506

这是一个次要版本,旨在与 2025 年 4 月发布的 WinDbg 更新相一致。

已更改

  • 单击数据模型中的 TTD 位置(即“模块”列表中)可导航到跟踪中的该位置。 (1.11.492)

    注意:在执行下一步或运行命令之前,命令窗口不会显示更新的 TTD 位置。

固定

  • 附加到 PID 时,将进程名称添加到 .out 文件中,以方便故障排除。 (1.11.486)

1.11.481

我们重新设计了 !tt 命令,为你提供了更强大的方法来浏览你的追踪记录:

  • 小数百分比可用于缩小搜索范围(!tt 23.65)
  • 查找上一次/下一次寄存器更改值(!tt br ebx)
  • 查找内存范围的上一次或下一次访问(使用命令:!tt ba- [addr] [range])
  • 查找上一次/下一次执行过渡到不同模块的时间(!tt bm)
  • 查找上一次/下一次执行移动到特定模块(!tt bm ntdll)

有关更多详细信息,请参阅 文档

一些值得注意的修复:

  • “在 32 位跟踪上使用 @$cursession.TTD.Data.Heap() 时,“错误:64 位值在转换为数字时丢失精度”的消息已消失。”
  • 现在,在命令行中的任何位置都可以正确检测到帮助选项解析(-?-help)。
  • dx @$cursession.TTD.Calls() 不再需要地址来匹配函数的开头。 相反,地址将映射到最接近匹配的函数的起始位置。
  • TTD 能够通过 vertarget 命令正确报告目标操作系统版本。
  • 使用“-monitor”指令与托管服务名称一起使用时,不会再记录无关的托管服务。

已添加

  • 在 TTD 跟踪中注册更改断点 (1.11.431)

已更改

  • 使用监视模式修复按名称记录服务的问题(1.11.477)
  • 捕获调试器使用的实际目标系统的 OS 信息(1.11.473)
  • 修复模拟器和 CONTEXT 之间的 XMM 寄存器传输 (1.11.469)
  • 允许针对函数内地址调用查询 (1.11.459)
  • 支持在 !tt 命令行中使用符号表示地址/大小(1.11.454)
  • 提高一致性并扩展 TTD 导航命令的功能(1.11.453)
  • 在应对损坏的数据时改进模块数据库的一致性(版本 1.11.430)

固定

  • 在附加到 PID 时,将进程名称添加到输出中(1.11.486)
  • TTD·Data·Heap() 报告“错误:64 位值在转换为数值时丢失精度”在某些情况下(1.11.471)
  • 提高记录启用了阴影堆栈的进程的可靠性(1.11.466)
  • 通过 !tt bm 和数据模型添加模块导航 (1.11.462)
  • 修复命令行分析的一些问题。 (1.11.444)
  • 修复 lodsd,加载指定地址处的双字(清零 rax 的上部)(1.11.434)
  • 修复 libfuzzer 漏洞(1.11.433)

1.11.429

TTD 的此更新包含一些错误修复,以及一些内部更改,以提高可靠性。

注意:1.11.410 在 Intel/AMD LODSD 指令的仿真中引入了回归。 下一个版本将会修复这个问题。

修复:

  • 提高数据包读取的可靠性和其他杂项更改,以提高可靠性。
  • 修复模拟 AVX VBROADCAST[I/F]128 指令时的回归问题。
  • 修复了在较新版本的 Windows 中 ARM64 上的异常记录访问。

1.11.410

改进了辅助功能:进度 UI 现在可以通过文本大小更改正确缩放。

调试器中的 @$cursession.TTD.Calls() 命令现在支持与大量函数匹配的通配符。 现在可以查询大量函数(@$cursession.TTD.Calls("kernel32!*"))。

自动化:新的 -onMonitorReadyEvent 命令行选项指示录制监视器(-monitor 开关)何时准备好录制新进程。

修复:

  • 在初始化录制器时修复某些争用情况。
  • 修复记录 syscalls 以便断点正常工作的方式。
  • 修复与模块选择性录制相关的多个问题。

ARM64 修复:

  • 修复了阻止在普通 ARM64v8.0 级别 CPU 上记录 TTD 的 bug。
  • 改进了尝试在 ARM64 上使用 x86 或 x64 进程跟踪时的消息传送。

AMD/Intel 修复(包括 Google 报告的一些问题):

  • 修复了 LODS 的不正确模拟:现在,RAX 的未使用位可以被正确保留,而不是被清零。
  • 修复了 x86/x64 进程中“pop ax”指令的模拟,该指令错误地将整个寄存器的高位清零(例如“pop ax”清除了 rax 的高位)。
  • 直接模拟 XGETBV 指令(更快)。
  • 直接模拟所有 AVX512 SIMD 移动(更快)。

1.11.316

修复了在使用不间断的数据密集型长指令序列录制程序时导致偶尔崩溃的回归。

ARM64 修复:

  • 现在支持在启用了 PAC 功能的 ARM64 进程中进行录制。
  • 修复了无法清除进位和溢出标志的 ANDS 和 TST 指令。

AMD/Intel 修复:

  • 修复了 TTD 错误地将“xchg r8,rax”和“xchg r8w,ax”模拟为 NOP 的 bug。

1.11.304

TTD 现已实现并公开发布了一个 API,用于在实时记录过程中控制记录器。 文档和示例可在 GitHub 中找到。

现在,TTD 可以使用新的 -recordMode 开关在记录关闭的情况下自行注入。 默认情况下,TTD 使用 -recordMode Automatic 时会记录所有线程。 如果 -recordMode Manual 指定,则 TTD 会注入目标进程,但直到通过 API 调用被告知要执行该操作,否则不会记录任何内容。

现在,可以使用开关 -module 将记录限制为一组特定的模块。 在某些情况下,这可以大大加快记录速度,缩小跟踪文件。 可以指定多个 -module 开关。

发行版中现在包含了匹配的记录和重播组件。 如果调试器与命令行记录器不兼容,或者出现重播错误,可以作为一种变通方法将重播组件复制到调试器安装中,直到新的调试器发布。

可通过执行以下作在 PowerShell 中找到已安装的文件位置:

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

已添加

  • 添加了 - recordmode 开关,在不自动记录的情况下启用注入 (1.11.296)
  • 添加了 - module 开关并用于创建 SR 配置 (1.11.291)
  • 将进程内 API 记录的自定义数据投射到数据模型 (1.11.286)
  • 添加了新的 TTDLiveRecorder.dll 并将其与 TTDRecordCPU.dll 连接起来 (1.11.283)
  • 在 MSIX 中添加了重播组件,并修复了 SDK 查找 (1.11.265)

已更改

固定

  • 解决某些内部工具中使用的 nlohmann JSON 序列化程序中的错误 (1.11.281)
  • 调整字符串对齐方式以避免出现罕见的 CRT 错误 (1.11.279)
    • 已向 VS 和 OS 代码库报告并得到修复。
  • 根据 Watson 崩溃报告进行了若干小修复 (1.11.276)
  • 修复了在某些情况下可能导致跟踪文件损坏的回归问题 (1.11.264)

已知问题

  • 在 ARM64 上,编译器无法对许多频率函数进行尾调用,在极端情况下,可能会导致记录器耗尽堆栈空间并崩溃。

1.11.261

此版本中的显著更改包括:

  • [ARM64] 修复了当目标寄存器用作源寄存器时,SXTLSQXTN2SQXTUN2UQXTN2XTN2TRN1 指令的行为。
  • [ARM64] 修复了导致调试器显示SIMD寄存器的低64位复制到高64位的问题。
  • [AMD64] AMD Zen4 处理器的 AVX512 仿真修复(寄存器损坏)。

已更改

  • 为模拟器实现一个新的版本控制系统。 (1.11.260)

固定

  • 修复了目标寄存器也用作源寄存器的错误 ARM64 指令。 (1.11.261)
  • 修复了直接返回仿真器的 Zen4 解决办法。 (1.11.222)

1.11.202

此版本修复了通过 -monitor 开关记录服务或监控进程启动时遇到的一些问题。 还取消了产品对 ARM32 的记录支持。

已更改

  • 将 TTD 组件作为 DLL 链接到 UCRT,从而减少二进制文件的大小。 (1.11.191)

固定

  • 修复了服务记录问题。 (1.11.193)
  • 修复了使用 -monitor 时的几个问题。 (1.11.189)
  • 修复了在 x64 上运行回退时保留非易失性的函数堆栈帧 (1.11.188)
  • 重新启用了 TTD 输出缓冲 (1.11.187)
  • 修复了 ProcessMonitorServer 中 GPO 句柄的处理问题 (1.11.179)

已删除

  • 从存储库中移除了 ARM32 记录代码 (1.11.198)

1.11.173

此版本通过从 .out 文件中提取错误信息并将其打印到控制台,提高了某些错误信息的可见性。 它还修复了跟踪重播期间罕见的崩溃问题。

已更改

  • 从 .out 文件中提取并打印错误信息 (1.11.173)

固定

  • 修复了从独立进程读取 .out 文件时的文件冲突问题。 (1.11.171)
  • 修复了跟踪重播期间罕见的崩溃问题。 (1.11.166)

1.11.163

此版本新增了在 x64 机器上记录 x86 进程的支持。

已更改

  • 修复了 x64 TTD 安装时的 x86 记录问题 (1.11.163)

固定

  • EULA 清理 (1.11.161)

1.11.159

此版本是命令行记录器的第一个公开版本。 除了命令行记录器公开发布所需的几处改动外,该版本还包括一些错误修复,包括对 CPU 仿真器的几个修复。

-timestampFileName 开关可基于时间戳生成 .run 文件。 在记录同一进程的多个实例,并希望尽量减少记录启动时间时,该功能非常有用。

已更改

  • 根据使用的跟踪器在运行时选择默认注入模式 (1.11.156)
  • 添加了开关以启用基于时间戳的 .run 文件生成 (1.11.155)
  • 添加了 EULA 和 -accepteula TTD (1.11.154)
  • 将 ProcLaunchMon.sys 添加到 MSIX (1.11.153)
  • 创建了每个存档的 MSIX 和 MSIXBUNDLE (1.11.152)
  • 修复了使用 Clang 测试 TTD 时出现的一些问题。 (1.11.146)
  • TTDAnalyze 的 Clang 修复 (1.11.144)

固定

  • 审查关于应用程序安装程序/公开发布的反馈意见 (1.11.159)
  • RC 反馈 (1.11.157)
  • 通过将 RegisterInfo 初始化为指向接收器来避免零寄存器的损坏。 (1.11.149)
  • 通过立即修复 TST 指令,并增强单元测试以涵盖更多内容。 (1.11.148)
  • 合并受保护的进程决策并禁用受保护的进程使用 (1.11.147)

1.11.138

已更改

  • 创建记录器 MSIX (1.11.138)
  • 修复了所有问题,使 Clang 可以构建 TTD。 (1.11.137)
  • 引入 -monitor X,记录进程启动时的情况 (1.11.116)

固定

  • 修复了“CMP ZR”ARM64 仿真问题 (1.11.128)
  • 修复了 AMD Zen4 处理器上的 AVX512 仿真问题 (1.11.127)
  • 修复了 TTD 用于查找特定 CPU 文件的机制 (1.11.121)
  • 修复了 x86 TTD 回归问题(TTDRecordCPU.dll 无法加载) (1.11.110)
  • 修复了 ARM64 上的返回本机路径问题,使其不会破坏 X28 (1.11.109)

另请参阅

时间旅行调试 – 概览

时间旅行调试 - 命令行记录器