时光穿越调试 - 使用跟踪文件

带有时钟的时光穿越调试徽标。

本部分介绍如何使用通过时光穿越调试创建和使用的文件。

跟踪文件概述

时光穿越调试使用以下文件调试代码执行。

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

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

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

跟踪 .RUN 文件

跟踪 .RUN 文件可在使用文件>开始调试>打开跟踪文件录制后被打开。

文件打开选项的屏幕截图,其中突出显示了“打开跟踪文件”选项。

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

C:\Users\User1\Documents

您可以在开始记录时更改跟踪文件的位置。 有关详细信息,请参阅时光穿越调试 - 记录

最近使用的文件列表可让您快速访问以前使用的目标配置文件。 还会列出最近使用的任何跟踪文件或转储文件。

文件打开列表的屏幕截图,其中显示了最近使用的五个 .run 跟踪文件。

索引 .IDX 文件

在 WinDbg 中打开跟踪文件时,会自动为相关的跟踪 .RUN 文件创建索引 .IDX 文件。 您可以使用 !index 命令手动创建索引文件。 通过索引可更快地访问跟踪信息。

IDX 文件也可能很大,通常为 .RUN 文件的两倍。

重新创建 .IDX 文件

您可以使用 !index 命令从 .RUN 文件重新创建 .IDX 文件。 有关更多信息,请参阅时光穿越调试 -!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 命令重新创建该文件。

提示

与他人协作时,传递与当前问题相关的任何相关跟踪位置。 协作者可以使用 !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 会自动创建索引文件。 它包含的信息有助于调试器更有效地重播有关内存的跟踪和查询信息。 其大小通常为跟踪文件大小的 1 到 2 倍。 影响其大小的因素类似于影响跟踪文件大小的因素。

首先,索引文件的大小与跟踪的长度成比例。 包含更多记录指令的跟踪通常会有较大的索引。

其次,索引的大小与内存访问的广度成比例。 如果记录的程序经常访问大量不同的内存位置,则索引通常大于记录访问的内存位置较少或对内存位置的访问频率较低的程序。

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

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

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

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

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

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

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

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

另请参阅

时光穿越调试 - 概述