共用方式為


使用 Framework 的事件記錄器

WDF 包含內部追蹤記錄器,有時稱為架構的內部追蹤 記錄 器 (IFR) 。 WDF 記錄器會建立追蹤記錄,其中包含每個 WDF 驅動程式事件的最新歷程記錄。 追蹤記錄會追蹤透過架構的 I/O 要求封包進度, (IRP) ,以及透過驅動程式的對應要求。 每個 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. 如果您的驅動程式使用架構 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 擴充功能命令,將事件記錄器記錄儲存在事件追蹤記錄檔 (.etl) 檔案中,您可以使用 TraceView檢視。

您有時可以在損毀傾印上使用 !wdfcrashdump 偵錯工具延伸模組,在系統錯誤檢查之後顯示記錄資訊。 只有在架構可以判斷驅動程式造成錯誤檢查,或您已設定驅動程式的 ForceLogsInMiniDump 登錄值時,才會在損毀傾印中取得記錄資訊。

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

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

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

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