使用 MFTrace
MFTrace 是一种工具,用于为 Microsoft Media Foundation 应用程序生成跟踪日志。
MFTrace 使用 Detours 库挂钩到 Media Foundation API 调用并生成跟踪日志。 MFTrace 还可以记录来自任何使用 Windows (ETW) 事件跟踪的组件或软件跟踪预处理器 (WPP) 来生成跟踪的跟踪。 可以通过从 MFTrace 启动新进程或将 MFTrace 附加到现有进程来生成跟踪日志。
使用情况
mftrace [-aProcess][-cConfigurationFile][-dc][-es][-kKeyWords][-lLevel][-oOutputFile][-v][-?] [{COMMAND|ETL_FILE}]
命令行参数 | 说明 |
---|---|
-a进程 ID 或进程名称 |
附加到正在运行的进程。 |
-C配置文件 |
从指定的配置文件中读取设置。 请参阅 MFTrace 配置文件。 |
-直流 |
禁用子进程的跟踪。 默认情况下,为子进程启用跟踪。 |
-es |
启用公共符号。 |
-K关键 字 |
以逗号分隔的关键字列表。 请参阅 MFTrace 关键字。 |
-我水平 |
跟踪级别。
|
-o输出文件 |
将跟踪输出写入指定的文件。 默认情况下,输出将转到 stdout。 如果指定了输出文件,则文件扩展名必须是以下项之一:
|
-V |
启用详细模式。 |
-? |
显示用法信息。 |
命令 |
用于创建新进程的命令行参数。 |
ETL_FILE |
现有 ETL 文件的名称。 如果提供此参数,则 ETL 文件将转换为文本输出。 |
环境变量
-
TRACE_FORMAT_SEARCH_PATH
-
若要跟踪使用 Windows 软件跟踪预处理器 (WPP) 的组件,请将此环境变量设置为指定组件 (TMF) 文件跟踪消息格式的路径。
-
_NT_SYMBOL_PATH
-
如果启用符号查找 (-es) ,请设置此环境变量以指定符号路径。
示例
创建新进程并跟踪该进程:
mftrace.exe wmplayer.exe Wildlife.wmv
将 MFTrace 附加到现有进程:
mftrace.exe -a wmplayer.exe
mftrace.exe -a 9132
将跟踪输出发送到文本文件:
mftrace.exe -a wmplayer.exe -o trace.txt
跟踪 ETW 或 WPP 事件:
mftrace.exe -c config.xml -o trace.txt
mftrace.exe -c config.xml -o trace.etl
注意
第一个示例生成文本文件。 第二个示例生成 ETL 文件。
将 ETL 文件转换为文本文件:
mftrace.exe -o trace.txt trace.etl
注解
默认情况下,MFTrace 仅生成 Detours 跟踪。 若要生成 ETW 或 WPP 跟踪,必须提供配置文件。 配置文件提供跟踪提供程序的名称。 有关详细信息,请参阅 MFTrace 配置文件。
MFTrace 可以将输出发送到以下目标:
- stdout (默认) 。
- 文本文件。
- 二进制 ETL 文件。
如果要记录 ETW/WPP 跟踪,ETL 文件是最有效的选项,因为跟踪数据保存为二进制 Blob。 跟踪会话完成后,可以使用 MFTrace 将 ETL 文件转换为文本文件。
注意
对于 Detours 跟踪,文本输出与 ETL 文件一样高效。 因此,如果只记录 (的 Detours 跟踪,并且没有 ETW/WPP 跟踪) ,则建议使用文本输出。
对于 Detours 跟踪,必须将 MFTrace 附加到正在运行的进程 (-a) 或使用 MFTrace 创建新进程。 对于 ETW/WPP 跟踪,MFTrace 侦听配置文件中列出的任何事件提供程序。
可以通过 -k 命令行选项或在配置文件中指定跟踪关键字来筛选跟踪结果。 但是,更典型的用法是记录所有跟踪,然后使用脚本或 grep 搜索特定的字符串模式。
解释跟踪结果
可以使用 MFTrace 回答有关 Media Foundation 应用程序或组件内发生的情况的问题。 下表列出了一些典型问题。 第二列提供可帮助回答问题的搜索字符串。
问题 | 搜索字符串 |
---|---|
是否发生了错误? | “0xc00d” |
拓扑是否正确解析? | “CTopologyHelpers::Trace” |
媒体会话是否已启动? | “MESessionStarted” |
播放了哪个文件? | “CMFSourceResolverDetours” |
源流的媒体类型有哪些? | “New stream”、“MENewStream”、“CMFMediaSourceDetours::TracePD” |
源流是否生成了示例? | “CMFMediaStreamDetours::HandleEvent”、“MEMediaSample” |
播放是否已到达数据末尾? | “MEEndOfStream”、“MEEndOfPresentation” |
格式是否发生了更改? | “MEStreamFormatChanged” (媒体源) 、“新格式”、“MESessionStreamSinkFormatChanged” (媒体接收器) |
创建了哪些对象? | “COle32ExportDetours::CoCreateInstance” |
媒体基础转换 (MRT 是否在管道中) 处理任何数据? | “CMFTransformDetours::P rocessOutput”、“CMFTransformDetours::P rocessInput” |
MRT 上设置了哪些状态? | “CMFTransformDetours::P rocessMessage” |
MFT 请求是否输入数据? | “MF_E_TRANSFORM_NEED_MORE_INPUT” (同步 MFT) ,“METransformNeedInput” (异步 MFT) 。 |
异步 MFT 是否生成输出数据? | “可用的 ProcessOutputs” |
媒体接收器是否请求采样? | “MEStreamSinkRequestSample” |
媒体接收器是否接收了样本? | “CMFStreamSinkDetours::P rocessSample” |
DirectShow:处理了哪些样本? | “sample”、“CMemInputPinDetours” |
DirectShow:使用了哪个筛选器图? | “CGraphHelpers::Trace” |
是否存在多个进程? | “CreateProcess” 注意: 另请查找显示在每个跟踪行开头的进程标识符。 |
相关主题
-
MFTrace
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈