时间旅行调试 - 使用跟踪文件

Small time travel logo showing clock.

本部分介绍如何处理在进行调试时创建和使用的文件。

跟踪文件概述

时间旅行调试使用以下文件调试代码执行。

  • 跟踪文件包含代码执行记录,并且有一个 。RUN 扩展。

  • 索引文件可快速访问跟踪文件中的信息,并具有一个 。IDX 扩展。

  • 录制错误和其他录制输出将写入调试器日志文件。

跟踪。RUN 文件

跟踪。使用文件>录制后,可以打开 RUN 文件"开始"菜单调试>“打开跟踪文件”。

File open options showing open trace option highlighted.

默认情况下,所有跟踪输出文件都存储在用户文档文件夹中。 例如,对于 User1,TTD 文件将存储在以下位置:

C:\Users\User1\Documents

可以在开始记录时更改跟踪文件的位置。 有关详细信息,请参阅 时间旅行调试 - 录制

最近使用的文件列表允许快速访问以前使用的目标配置文件。 此外,还列出了最近使用的任何跟踪文件或转储文件。

File open list of .run trace files showing five recently used trace files.

指数。IDX 文件

索引 。为关联的跟踪创建 IDX 文件。在 WinDbg 预览版中打开跟踪文件时,会自动运行文件。 可以使用 !index 命令手动创建索引文件。 索引允许更快地访问跟踪信息。

IDX 文件也可以很大,通常为大小两倍。RUN 文件。

重新创建 .IDX 文件

可以重新创建 。来自 . 的 IDX 文件使用 !index 命令运行文件。 有关详细信息,请参阅 时间旅行调试 - !index (时间旅行)

0:0:001> !index
Indexed 3/3 keyframes
Successfully created the index in 49ms.

共享 TTD 跟踪。RUN 文件

TTD 仅本地,无法远程连接到另一台计算机。

可以通过复制 与其他文件共享 TTD 跟踪文件。RUN 文件。 这可用于让同事帮助你找出问题。 它们不需要安装崩溃应用或执行任何其他相关设置来尝试重现该问题。 他们只需加载跟踪文件并调试应用,就像在电脑上安装一样。

重播 TTD 跟踪的计算机必须支持记录计算机上使用的所有指令,例如 AVX 指令。

可以重命名该文件以包含任何其他信息,例如日期或 bug 号。

.无需复制 IDX 文件,因为可以使用上述 !index 命令重新创建 IDX 文件。

提示

与他人协作时,传递与问题相关的任何相关跟踪位置。 协作者可以使用 !tt x:y 命令移动到代码执行中的确切时间点。 时间位置范围可以包含在 bug 说明中,以跟踪可能出现的问题的位置。

错误 - 日志文件

录制错误和其他录制输出将写入调试器日志文件。 若要查看日志文件,请选择“ 查看>日志”。

本示例显示尝试启动并记录不在 C:\Windows 目录中的名为Foo.exe的可执行文件时的错误日志文本。

2017-09-21:17:18:10:320 : Information : DbgXUI.dll : TTD: Output: 
Microsoft (R) TTD 1.01.02
Release: 10.0.16366.1000
Copyright (C) Microsoft Corporation. All rights reserved.
Launching C:\Windows\Foo.exe
2017-09-21:17:18:10:320 : Error : DbgXUI.dll : TTD: Errors: 
Error: Trace of C:\Windows\Foo.exe PID:0 did not complete successfully: status:27
Error: Could not open 'Foo.exe'; file not found.
Error: Corrupted trace dumped to C:\Users\User1\Documents\Foo01.run.err.

跟踪文件大小

TTD 跟踪文件可能非常大,必须确保有足够的可用磁盘空间。 如果只记录应用或进程几分钟,跟踪文件的大小可能会增大到几千兆字节。 跟踪文件的大小取决于下面所述的许多因素。

TTD 未设置最大跟踪文件大小,以允许复杂的长时间运行方案。 快速重新创建问题,将尽可能小地保留跟踪文件大小。

跟踪文件大小因素

无法提供跟踪文件大小的确切估计,但有一些经验规则可帮助你了解 TTD 文件大小。

以下因素可能会影响跟踪文件的大小:

  • 录制正在运行的应用或进程时在所有线程中执行的代码指令数
  • 仅当这会影响记录) ) 的代码指令数时,才会记录应用或进程的时间长度 (
  • 应用或进程使用的内存数据的大小

执行和记录的指令数是影响跟踪文件大小的最大因素。 每个执行指令的跟踪通常需要 1 位到 1 字节。 当录制的程序执行少量非重复函数并对较小的数据集进行操作时,跟踪可能会接近该范围的下端。 当录制的程序执行大量非重复函数或对较大数据集进行操作时,跟踪可能会接近该范围的更高端。

跟踪文件大小规则的经验

记录活动应用或进程时,跟踪文件每秒增长约 5MB 到 50MB,具体取决于上面标识的跟踪文件大小因素。

在等待输入) 时,记录的应用或进程空闲时,跟踪文件不会增长 (。

目前跟踪文件没有最大文件大小限制。 WinDbg 预览版可以重播大小为数百 GB 的跟踪文件。

索引文件大小

首次打开跟踪时,WinDbg Preview 会自动创建索引文件。 它包含有助于调试器更有效地重播有关内存的跟踪和查询信息的信息。 其大小通常范围为跟踪文件的大小的 1 到 2 倍。 影响其大小的因素类似于影响跟踪文件大小的因素。

首先,索引文件的大小相对于跟踪的长度进行缩放。 包含大量记录指令的跟踪通常具有较大的索引。

其次,索引的大小相对于内存访问的广度进行缩放。 如果记录的程序经常访问大量非重复内存位置,索引通常大于记录的程序访问的内存位置较少,或者对内存位置的访问频率较低。

由于这些因素类似于影响跟踪文件大小的因素,因此索引文件的大小通常相对于索引文件的大小进行缩放, (因此我们估计跟踪文件的大小通常介于 1 倍到 2 倍之间) 。

如果磁盘空间不足,该怎么办?

TTD 跟踪和索引文件都写入磁盘。 目前,跟踪或索引文件没有最大文件大小限制。 跟踪文件的大小会增大,直到停止录制或超过可用磁盘空间量。

在录制期间: TTD 会将最后一页写出到跟踪文件,然后有效等待,直到它可以再次写入。 WinDbg 继续显示“录制”对话框,但在录制期间磁盘空间不足时不会显示错误/警告消息。

在录制过程中磁盘空间不足会导致跟踪文件的代码执行记录不完整。 可以在 WinDbg 预览版中打开不完整的跟踪文件,但如果在写入跟踪文件时出现磁盘空间不足后出错,则它可能不会包含实际问题。

解决方法:打开文件资源管理器并检查磁盘 (,即 C: 驱动器) 可用空间是否接近零。 或者监视跟踪 (。在“文档”文件夹) 中,文件资源管理器 (默认运行) 文件,如果未定期增大大小,则录制可能会等待。 在 WinDbg 中选择“停止和调试”按钮,释放空间或保存到其他磁盘,然后重新开始录制。

在编制索引期间: 调试器可能会生成无效的索引文件,从而导致调试器中不可预知的行为,或者调试器引擎主机可能会崩溃。

解决方法:关闭调试器并删除跟踪可能存在的任何索引文件 (.idx) 。 释放足够的磁盘空间,或者将跟踪文件移到具有足够可用空间的其他磁盘。 在调试器中再次打开跟踪并运行 !index 以创建新的正确索引。 索引不会修改原始跟踪文件 (.run) ,因此不会丢失任何数据。

另请参阅

时光穿越调试 - 概述