共用方式為


使用架構的事件記錄器

WDF 包含內部追蹤記錄器,有時稱為框架的 In-flight Recorder(IFR)。 WDF 記錄器會建立追蹤記錄,其中包含每個 WDF 驅動程式的事件最近歷程記錄。 追蹤記錄會記錄 I/O 要求封包透過架構的進度,以及驅動程式中的對應要求。 每個 Kernel-Mode Driver Framework (KMDF) 和 User-Mode Driver Framework (UMDF) 驅動程式都有自己的記錄檔。

WDF 記錄器始終處於啟用狀態。 針對每個追蹤記錄檔,記錄器會將事件記錄儲存在迴圈記憶體緩衝區中。 或者,您可以開啟詳細模式,這會導致事件記錄器記錄其他資訊,以協助您偵錯驅動程式,例如進入或退出內部程式碼路徑的點。 根據預設,緩衝區的大小是一個記憶體頁面,而且詳細輸出已關閉。 您可以在 WdfVerifier 應用程式內調整這些值,以變更緩衝區的大小和描述訊息的詳細程度。 請注意,開啟冗長模式可能會降低系統效能。

您可以使用 WDF 調試程式延伸模組,在互動式偵錯期間檢視和儲存 WDF 記錄檔。 若要在偵錯會話期間檢視 WDF 記錄:

  1. 載入正確的符號。 您可以使用 .symfix+ 調試程式命令,將Microsoft公用符號存放區附加至現有的符號路徑。 公用符號存放區包含 WDF 二進位檔的符號。 您也可以載入您的驅動程式相關的符號。

    如需如何取得視窗符號以及如何設定調試程式符號路徑的其他資訊,請參閱 Windows 偵錯 套件所提供的檔。

  2. Wdfkd.dll 擴充功能連結庫 載入調試程式。 如果您使用內核調試程式,您可以使用 .load 命令來執行此動作。 若要載入Wdfkd.dll的正確版本,您需要指定 DLL 的完整且確切路徑。 例如,您會在 x86 型調試程式主電腦上使用下列路徑:

    .load "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\wdfkd.dll"
    

    接著,您可以使用 !chain 命令來顯示所有載入的延伸模組,以確認擴充功能已載入。

    如需架構調試程式擴充功能的詳細資訊,請使用 !wdfhelp 擴充功能。 如需核心調試程式的詳細資訊,請參閱 Windows 偵錯 套件所提供的檔。

  3. 如果您的驅動程式使用 Framework 1.11 版或更新版本,而且您使用的是 Windows 8 或更新版本的核心調試程式,則可以略過此步驟。

    如果您的驅動程式使用早於 1.11 的架構版本,請使用 !wdftmffile!wdfsearchpath 來指定平臺特定的追蹤訊息格式 (.tmf) 檔案或 .tmf 檔案的路徑。 .tmf 檔案位於 WDK 的平臺特定子目錄中。

    因為 .tmf 檔案是特定版本,您必須指定對應至目前執行中之架構運行時間連結庫版本的 .tmf 檔案。 例如,如果 KMDF 1.9 版正在主電腦上執行:

    !wdftmffile c:\WinDDK\<version>\tools\tracing\x86\wdf01009.tmf
    

    您也可以藉由設定TRACE_FORMAT_SEARCH_PATH環境變數來設定搜尋路徑。 !wdftmffile 命令的優先順序高於環境變數所設定的搜尋路徑。

    若要驗證架構版本號碼,您可以從核心調試程式執行 !wdfldr 調試程序擴充功能命令。

  4. 使用 !wdflogdump 擴充功能來顯示事件記錄器記錄。 例如,WinDbg 命令視窗的下列螢幕快照顯示 !wdflogdump輸出的一般範例:

    WinDbg 命令視窗中 !wdflogdump 擴充功能輸出的螢幕快照。

架構記錄中的每個行前面都會加上稱為 追蹤訊息前置詞的字串,。 追蹤記錄器會在寫入日誌的每條訊息前面加上這個前綴。 根據預設,前置詞會包含一組標準數據元素,但您可以變更預設元素以符合您的特定需求。 您可以藉由設定TRACE_FORMAT_PREFIX環境變數或使用 !wdfsettraceprefix 調試程序擴充命令,來變更 WDF 驅動程式的前置詞字串。

若要設定環境變數,請使用類似下列的命令:

Set TRACE_FORMAT_PREFIX=%2!s!: %!FUNC!: %8!04x!.%3!04x!: %4!s!:

此命令會將追蹤訊息字首設定為如下:

SourceFile_LineNumber: FunctionName: ProcessID.ThreadID: SystemTime

您也可以使用 !wdflogsave extension 命令,將事件記錄器記錄檔中的記錄儲存在您可以使用 TraceView來檢視的事件追蹤記錄檔中。

有時候,您可以在崩潰傾印上使用 !wdfcrashdump 調試擴展,在系統錯誤檢查後顯示日誌資訊。 只有當架構確認是您的驅動程式導致了 Bug Check,或您已為驅動程式設定 ForceLogsInMiniDump 登錄值時,才能在崩潰轉儲中獲取日誌資訊。

如果在錯誤檢查發生時附加了調試程式,您可以使用 !wdfcrashdump 來立即檢視記錄資訊,或者通過載入記憶體傾印檔案來檢視資訊。 由於小型記憶體轉儲檔案的大小限制,導致損毀的驅動程序記錄可能不會出現在傾印中。

架構可以判斷特定驅動程式是否造成下列錯誤檢查碼:

從UMDF第2版開始,UMDF會將UMDF追蹤記錄檔(或UMDF IFR)儲存在核心非分頁記憶體中。 架構會為每個驅動程式主機 (Wudfhost) 實例配置一個 IFR。

如需除錯程式擴充功能命令的詳細資訊,請參閱 Framework 型驅動程式的除錯程式延伸模組