使用 MFTrace
MFTrace 是一種工具,可用於產生Microsoft Media Foundation 應用程式的追蹤記錄。
MFTrace 會使用 Detours 連結庫來連結媒體基礎 API 呼叫併產生追蹤記錄。 MFTrace 也可以記錄任何使用 Windows 事件追蹤或軟體追蹤預處理器 (WPP) 來產生追蹤的元件追蹤。 從 MFTrace 啟動新的進程,或將 MFTrace 附加至現有進程,即可產生追蹤記錄。
使用方式
mftrace [-a Process][-c ConfigurationFile][-dc][-es][-k KeyWords][-l Level][-o OutputFile][-v][-?] [{COMMAND|ETL_FILE}]
命令列引數 | 描述 |
---|---|
-a進程識別碼或進程名稱 |
附加至執行中的處理序。 |
-c組態檔 |
從指定的組態檔讀取設定。 請參閱 MFTrace 組態檔。 |
-dc |
停用子進程的追蹤。 根據預設,子進程會啟用追蹤。 |
-es |
啟用公用符號。 |
-k關鍵詞 |
以逗號分隔的關鍵詞清單。 請參閱 MFTrace 關鍵詞。 |
-l層級 |
追蹤層級。
|
-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 只會產生「繞行」追蹤。 若要產生 ETW 或 WPP 追蹤,您必須提供組態檔。 組態檔會提供追蹤提供者的名稱。 如需詳細資訊,請參閱 MFTrace 組態檔。
MFTrace 可以將輸出傳送至下列目的地:
- stdout (預設值)。
- 文字檔。
- 二進位 ETL 檔案。
如果您要記錄 ETW/WPP 追蹤,ETL 檔案是最有效率的選項,因為追蹤數據會儲存為二進位 Blob。 追蹤工作階段完成後,您可以使用 MFTrace 將 ETL 檔案轉換成文字檔。
注意
針對「繞行追蹤」,文字輸出就像 ETL 檔案一樣有效率。 因此,如果您只記錄「繞行追蹤」(不含 ETW/WPP 追蹤),建議使用文字輸出。
若要進行追蹤,您必須將 MFTrace 附加至執行中的進程(-a),或使用 MFTrace 來建立新的進程。 針對 ETW/WPP 追蹤,MFTrace 會接聽組態檔中列出的任何事件提供者。
您可以透過 -k 命令列選項或在組態檔中指定追蹤關鍵詞來篩選追蹤結果。 不過,較典型的用法是記錄所有追蹤,然後使用腳本或 grep 來搜尋特定字串模式。
解譯追蹤結果
您可以使用 MFTrace 來回答媒體基礎應用程式或元件內發生什麼情況的問題。 下表列出一些典型問題。 第二個數據行會提供可協助回答問題的搜尋字串。
問題 | 搜尋字串 |
---|---|
發生錯誤嗎? | “0xc00d” |
拓撲是否正確解析? | “CTopologyHelpers::Trace” |
媒體會話是否開始? | “MESessionStarted” |
已播放哪一個檔案? | “CMFSourceResolverDetours” |
來源數據流的媒體類型為何? | “New stream”、“MENewStream”、“CMFMediaSourceDetours::TracePD” |
來源數據流是否會產生範例? | “CMFMediaStreamDetours::HandleEvent”、“MEMediaSample” |
播放是否到達數據的結尾? | “MEEndOfStream”, “MEEndOfPresentation” |
格式變更了嗎? | “MEStreamFormatChanged” (媒體來源)、“新格式”、“MESessionStreamSinkFormatChanged” (媒體接收) |
已建立哪些物件? | “COle32ExportDetours::CoCreateInstance” |
管線中的媒體基礎轉換 (MFT) 是否正在處理任何資料? | “CMFTransformDetours::P rocessOutput”、“CMFTransformDetours::P rocessInput” |
MFT 上設定了哪些狀態? | “CMFTransformDetours::P rocessMessage” |
MFT 要求輸入數據嗎? | “MF_E_TRANSFORM_NEED_MORE_INPUT” (同步 MFT),“METransformNeedInput” (異步 MFT)。 |
異步 MFT 是否會產生輸出數據? | “ProcessOutputs available” |
媒體接收要求範例嗎? | “MEStreamSinkRequestSample” |
媒體接收接收樣本嗎? | “CMFStreamSinkDetours::P rocessSample” |
DirectShow:已處理哪些樣本? | “sample”, “CMemInputPinDetours” |
DirectShow:使用了何種篩選圖表? | “CGraphHelpers::Trace” |
是否有多個進程? | “CreateProcess” 附注: 也尋找出現在每個追蹤行開頭的進程標識符。 |
相關主題