如何从 Microsoft Symbol Server 下载 tracefmt 的 TMF 文件

如何从 Microsoft Symbol Server 下载 tracefmt 的 TMF 文件

Windows 事件跟踪框架 (ETW) 可用于记录大量有关系统内部的信息。Windows tracefmt.exeSDK 附带的工具可用于将.etl日志文件转换为文本。

但是,它需要.tmf消息格式文件来处理消息。否则数据填充只会显示为未知数:

Unknown( 25): GUID=72e5b5cd-5b46-3568-7f3a-3eb074bedc0f (No Format Information found).

我如何下载所需的.tmf文件?

答案1

1. 确定哪个.sys文件与 GUID 相关。

有时只需在线搜索 GUID 即可找到相关.sys文件。如果没有,可以对 中的.sys文件进行二进制搜索C:\Windows\System32

可以使用任何二进制 grep 工具,但必须将 GUID 字节重新排序为小端顺序。例如72e5b5cd将显示为0xcd 0xb5 0xe5 0x72。我使用以下 Python 单行代码执行搜索:

python -c 'import sys,uuid; print([x for x in sys.argv[1:] if uuid.UUID("72e5b5cd-5b46-3568-7f3a-3eb074bedc0f").bytes_le in open(x,"rb").read()])' *.sys

该特定 GUID 将出现在 中winusb.sys

请注意,只有 64 位应用程序才能访问真实的系统文件,32 位应用程序将看不到它们。

2. 下载.pdb文件.sys

对于此步骤,您需要symchk.exeWindows SDK。创建一个新目录来存储文件,这里我使用了C:\tracing

symchk.exe C:\Windows\System32\drivers\winusb.sys /s "SRV*C:\tracing*http://msdl.microsoft.com/download/symbols" /od

3. 从中提取跟踪格式.pdb

此步骤需要tracepdb.exeWindows SDK。我已将输出放在与上一步相同的目录中。

tracepdb.exe -f C:\tracing\winusb.pdb\450C4140E6D427E5ED2F1820DE4C7A2E1\winusb.pdb -p C:\tracing

请注意,十六进制字符串将取决于系统文件版本。检查文件列表以查看符号以什么名称下载。

现在您将看到正在生成的 TMF 文件列表:

....
tracepdb: info BNP0000: WPPFMT generating C:\tracing\72e5b5cd-5b46-3568-7f3a-3eb074bedc0f.tmf for C:\tracing\winusb.pdb\450C4140E6D427E5ED2F1820DE4C7A2E1\winusb.pdb
...

希望您能在该列表中看到所需的 GUID。如果没有,则它实际上不在该文件中,或者由于某种原因已从公共符号中删除。

请注意,如果您正在调试.etl从另一台计算机收集的文件,您还需要.sys从该计算机收集文件以获取正确的符号版本。

4. 解码踪迹

现在我们有了文件.tmf,可以将它们传递给tracefmt.exe

tracefmt.exe mylog.etl -p C:\tracing -o mylog.txt

该命令将显示结果计数如下:

Processing completed   Buffers: 156, Events: 274074, EventsLost: 0 :: Format Errors: 0, Unknowns: 8409

在这种情况下,大多数事件都已正确解码,但仍有一些未知数。检查其中还有哪些行Unknown,然后从步骤 1 开始重复。

相关内容