共用方式為


使用 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層級
追蹤層級。
  • 0:無
  • 1:重大
  • 2:錯誤
  • 3:警告
  • 4:資訊
  • 5:詳細資訊
  • 16:偵錯
-o輸出檔
將追蹤輸出寫入指定的檔案。 根據預設,輸出會移至 stdout
如果指定輸出檔案,擴展名必須是下列其中一項:
  • .etl:事件追蹤記錄檔 (ETL) 檔案。
  • .log或.txt:文字檔。
-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” 附注: 也尋找出現在每個追蹤行開頭的進程標識符。

 

MFTrace