用途:在已获得应用、服务或用户态驱动宿主进程的 TTD 录制后,回溯更早的调用、内存写入和对象生命周期,定位问题发生的时刻与证据。不适用于内核重放或历史记录。
主要能力与工作流:
- 打开并索引录制。在 WinDbg 中打开 .run 文件,加载公共 Windows 符号与自有二进制的匹配 PDB,执行 !tt.index 与 dx @$cursession.TTD 确认时间线范围。索引与数据模型可用性取决于 WinDbg/TTD 版本,命令不可用时应查阅本地帮助。
- 提出有边界的历史问题。用 dx @$cursession.TTD.Calls("MyModule!MyFunction") 查询已知函数,用 dx @$cursession.TTD.Memory(<start-address>, <end-address>, "w") 查询精确内存范围,再检查结果及时间线位置。空结果可能意味着符号不匹配、未被插桩或查询越界,不能证明不存在。分配器会复用地址,同一虚拟地址在不同时间可能代表不同对象。
- 定位并检查状态。用 !tt <position> 跳转到查询返回的真实位置,配合 k、r、g- 等查看栈、寄存器和反向执行,记录最后正常状态与首个异常状态、写入者/调用者栈及所有权转换。在确认对象身份、有效生命周期、预期不变量与跨线程顺序前,不要仅凭最后一次写入断定缺陷。
- 按证据继续已提供的调查方向:释放/写入错误或分配边界违规转 windbg-user-heap-corruption-investigation;分配/保留用量增长转 windbg-user-virtual-memory-exhaustion;协程挂起期间仍持有锁转 windbg-user-mutex-held-across-co-await;阻塞或跨进程依赖转 windbg-user-wait-chain-analysis。其他用户态问题族继续基于时间线推理;内核崩溃用 windbg-kernel-bugcheck-triage。
限制:TTD 可能改变时序、占用大量存储并捕获敏感内存,录制前需获得授权。录制不包含内核执行,也不会自动包含其他进程的服务端活动。单独 dump 没有执行时间线。可复现的时间线只能证明该次录制中发生的事,不能证明生产环境时序被完整保留。证据记录问题、跟踪标识、时间线位置、对象生命周期及源码/栈证据,并测试替代假设。反馈遵循 FEEDBACK.md 并提交给 WinDbg-Feedback,注明本技能与 plugin.json 中的包版本,切勿自动上传录制或其内存/查询内容。