时间旅行调试发行说明
本主题提供有关时间旅行调试中的新增功能的信息。
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] 修复了当目标寄存器用作源寄存器时,
SXTL
、SQXTN2
、SQXTUN2
、UQXTN2
、XTN2
和TRN1
指令的行为。 - [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)