示例 9:创建 TMF 文件

以下命令指示 Tracefmt 在 Tracedrv.etl(Tracedrv 生成的跟踪日志)中格式化和显示跟踪消息。 TraceDrv 是专为软件跟踪设计的示例驱动程序,可在 GitHub 上的 Windows 驱动程序示例 存储库中找到。

命令包含 -i 参数,该参数指示 Tracefmt 为 Tracedrv 创建 TMF 文件。

tracefmt d:\tracedrv\tracedrv.etl -i d:\tracedrv\tracedrv.sys -r d:\tracedrv 
-p d:\tracedrv\tmfs -o d:\tracedrv\tracedrv1.txt -v

命令使用 -i 参数指示 WDK 中 Tracedrv Tracedrv.sys 映像文件的完全限定路径。

-i d:\tracedrv\tracedrv.sys

它使用 -r 参数指示 Tracedrv.pdb 的完整版本的 PDB 符号文件 Tracedrv.pdb 的完全限定路径。 请注意,使用此参数指定路径,但不能指定文件名。 Tracefmt 根据 -i 指定的图像文件查找符号文件的正确版本。

-r d:\tracedrv

该命令使用 -p 参数指示 Tracefmt 将其为 Tracedrv 创建的 TMF 文件放在 d:\tracedrv\tmfs 目录中。

-p d:\tracedrv\tmfs

命令使用 -o 参数指示 Tracefmt 将格式化跟踪消息的输出文件放在 d:\tracedrv\tracedrv1.txt 文件中。 此参数还会将摘要文件放在同一目录中,文件名为 Tracedrv.txt.sum。

-o d:\tracedrv\tracedrv1.txt

-v 参数请求详细 () 消息。

为了响应此命令,Tracefmt 在 d:\tracedrv 目录中查找并查找 Tracedrv.sys 的 PDB 文件。 它从 PDB 文件中提取跟踪消息格式设置说明,并将其存储在 TMF 文件中,如后面的输出中以粗体字表示的 语句所示。 TMF 文件的名称是 Tracedrv 中跟踪提供程序 的消息 GUID 。 Tracefmt 还会 (TMC) 文件创建跟踪消息控件,并将其置于同一目录中。

Tracefmt 创建 TMF 文件后,它会读取该文件以在 Tracedrv.etl 跟踪日志中查找跟踪消息的格式设置说明。 它首先查找 Default.tmf 文件,并查找它在 d:\tracedrv\tmfs 目录中创建的 TMf 文件。

在设置数据格式之前,Tracefmt 显示有关跟踪日志的数据。 数据以 Logfile d:\tracedrv\tracedrv.etl 语句开头。

输出中的最后一个语句显示 Tracefmt 已成功格式化跟踪日志中的 13 个事件,并创建了 Tracedrv1.txt 和 Tracedrv1.txt.sum 文件。

Setting log file to: d:\tracedrv\tracedrv.etl

Searching for matching PDB to d:\tracedrv\tracedrv.sys
Current Symbol Search Path = d:\tracedrv

Extracting TMF files out of found PDB files
DBGHELP: d:\tracedrv\tracedrv.pdb - OK
tracefmt : info BNP0000: WPPFMT generating d:\tracedrv\tmfs\1606d1a7-1682-57d1-65f7-36693800e096.tmf for d:\tracedrv\tracedrv.pdb
tracefmt : info BNP0000: WPPFMT generating d:\tracedrv\tmfs\d58c126f-b309-11d1-969e-0000f875a5bc.tmc for d:\tracedrv\tracedrv.pdb
Examining C:\WinDDK\5066\tools\tracing\i386\default.tmf for message formats,  3 found.
Searching for TMF files on path: d:\tracedrv\tmfs
Logfile d:\tracedrv\tracedrv.etl:
        OS version              5.1.2600  (Currently running on 5.1.2600)
        Start Time              2005-06-10-14:25:30.827
        End Time                2005-06-10-14:26:14.371
        Timezone is             Pacific Standard Time (Bias is 480mins)
        BufferSize              8192 B
        Maximum File Size       0 MB
        Buffers  Written        2
        Logger Mode Settings    (0) Logfile Mode is not set
        ProcessorCount          1
06/10/2005-21:25:45.539 ::        1: Filled=     696, Lost=  0 TotalLost= 0

Processing completed   Buffers: 1, Events: 13, EventsLost: 0 :: Format Errors: 0, Unknowns: 0

Event traces dumped to d:\tracedrv\tracedrv1.txt
Event Summary dumped to d:\tracedrv\tracedrv1.txt.sum

此 Tracefmt 运行的主要输出是 Tracedrv.txt,这是一个文本文件,其中包含 Tracedrv.etl 中跟踪消息的格式版本。 以下文本显示了 Tracedrv.txt 的内容。

EventTrace
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]IOCTL = 1
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]Hello, 1 Hi
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]Hello, 2 Hi
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]Hello, 3 Hi
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]Machine State :: Offline
[0]0338.0E40::06/10/2005-14:25:43.968 [tracedrv]Function Return=0x8000000f(STATUS_DEVICE_POWERED_OFF)
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]IOCTL = 2
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]Hello, 1 Hi
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]Hello, 2 Hi
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]Hello, 3 Hi
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]Machine State :: Offline
[0]0338.0E40::06/10/2005-14:25:45.539 [tracedrv]Function Return=0x8000000f(STATUS_DEVICE_POWERED_OFF)