不支持。WinDbg Preview 无内置时间旅行调试(TTD)功能,仅通过手动录制并加载 tttracer.exe 生成的 .run 轨迹文件启用 TTD 模式,且需严格满足路径、符号、环境等条件才能正常使用。
不支持。WinDbg Preview 本身 没有内置时间旅行调试(Time-Travel Debugging, TTD)功能,它只是微软推出的现代化 UI 调试器前端,底层仍依赖 Windows 调试引擎(dbgeng.dll)。真正的 TTD 功能由 tttracer.exe 和 ttdebugger.exe 提供,且仅集成在 WinDbg Preview 的“TTD 模式”中——但这不是默认启用的,必须手动录制并加载轨迹文件,不是实时调试原生进程。
你需要先用命令行工具捕获执行轨迹,再在 WinDbg Preview 中加载该轨迹文件。这个过程分两步,缺一不可:
tttracer.exe 必须从 Windows SDK 或 Windows Driver Kit (WDK) 安装获取,路径通常为 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\tttracer.exe
.run 文件体积极大(GB 级),建议放在 SSD 上,且录制期间禁止休眠或锁屏TTD: running 或 TTD: paused,此
时才能使用 dx、!ttd 等指令回溯tttracer.exe -tracePath C:\temp\myapp.run -- C:\myproj\Debug\myapp.exe
这是常见误操作导致的:TTD 不是传统调试模式,所有“运行”动作实际是重放已录制的确定性轨迹。你不能像 attach 进程那样动态加断点,必须在重放过程中用 bp 设置回放时生效的断点,且只对轨迹中真实发生的指令有效。
lm 查看重放时的 start 列)g 是“继续重放到下一个断点”,u 只能反汇编当前重放位置,不能跳转到任意地址!ttd 命令族(如 !ttd.time、!ttd.log)仅在 TTD 模式下可用,普通附加模式下会报错 "Unknown command"
dx @$curstack 可能显示 ,需用 .srcpath 手动指定TTD 最适合复现**非随机、非外部依赖、可稳定触发**的 bug,比如崩溃前的变量渐变、条件竞争中的特定执行序。但它对以下情况基本无效:
std::random_device、QueryPerformanceCounter、网络 I/O、GUI 消息循环等不确定行为的程序tttracer -child 显式追踪全部dx 表达式求值能力大幅下降,甚至无法展开 std::vector
/DEBUG:FULL 链接选项,会导致 PDB 信息缺失,源码映射失败真正难的不是操作步骤,而是判断“这个 bug 是否真的能被 TTD 捕获”——很多开发者花半小时录完发现轨迹里根本没走到崩溃点,因为触发条件在录制环境里压根没满足。