共用方式為


如何啟用 UMDF 驅動程式的除錯

您可以在開發期間,使用下列設定來偵錯 User-Mode Driver Framework (UMDF) 驅動程式。 所有設定都牽涉到兩部機器、一部主機和一個目標。

  • 手動將驅動程式複製到目標。 在目標上執行使用者模式偵錯。 在此情境中,您會手動連接到在目標上執行的驅動程式主機程序實例。
  • 手動將驅動程式複製到目標,然後從主機執行內核模式偵錯。

我們建議在進行所有 UMDF 驅動程式的測試和開發時,使用已附加的核心除錯程式。

最佳做法

我們建議使用連結的核心調試程序執行所有UMDF驅動程序測試。

建議使用下列設定。 您可以手動設定這些設定,或使用 WDK 中的 WDF 驗證器控制應用程式 (WDFVerifier.exe) 工具來檢視或變更這些設定。

  • 在 WUDFHost.exe上啟用應用程式驗證器:

    AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
    

    如果發生例外狀況,應用程式驗證器會將診斷訊息傳送至偵錯器並停止程式執行。

  • 如果您使用核心模式偵錯會話,請設定 HostFailKdDebugBreak ,讓反射器在終止驅動程式主機進程之前中斷進入核心模式偵錯工具。 從 Windows 8 開始,預設會啟用此設定。

  • UmdfHostProcessSharing 設定為 ProcessSharingDisabled 來停用共用。 如需詳細資訊,請參閱 在 INF 檔案中指定 WDF 指示詞

  • 根據預設,當 UMDF 裝置失敗時,架構會嘗試將它重新啟動最多五次。 您可以將 DebugModeFlags 設定為 0x01,以關閉自動重新啟動。 如需詳細資訊,請參閱 偵錯 WDF 驅動程式的登錄值

  • 重新啟動電腦。

  • 若要偵錯 UMDF 驅動程式問題,請檢閱 判斷反映器為何終止主機進程偵錯 UMDF 驅動程式當機

使用 WinDbg 手動附加 (使用者模式偵錯)

在目標電腦上,您可以手動將 WinDbg 附加至裝載驅動程式的 WUDFHost 實例。 當您連接時,您會進入調試程式,以便於在驅動程式中設定斷點。

因為驅動程式初始化會在 WUDFHost 載入之後不久發生,所以您無法及時手動附加以偵錯初始化程式代碼。 相反地,請設定登錄值,讓主機進程在主機初始化或驅動程式載入時間等候一些秒數。 此延遲可讓您有時間將 WinDbg 附加至 WUDFHost 進程的正確實例。

請遵循下列步驟:

  1. 在目標電腦上的登錄中,將 HostProcessDbgBreakOnStartHostProcessDbgBreakOnDriverLoad 設定為一些秒數並重新啟動。
  2. 在目標計算機上,以系統管理員身分開啟 WinDbg。
  3. 在 [ 檔案] 功能表上,選擇 [ 附加至進程]。 選取 [依可執行檔],並找出所有名為 WUDFHost.exe 的進程(可能沒有任何)。 如果有任何名為 WUDFHost.exe的進程,請記下其進程標識碼以供日後參考。
  4. 在設備管理員中,啟用驅動程式。
  5. 重複步驟 2,並找出 WUDFHost.exe的新實例。 如果您沒有看到 WUDFHost.exe的新執行個體,請選取 [取消],然後再次選擇 [附加至程序 ]。 當您找到新的 WUDFHost.exe 執行個體時,選取它,然後選擇 確定

如果 正在使用裝置集區 ,而且您設定 HostProcessDbgBreakOnDriverLoad 登錄值,您可能會因為載入其他驅動程式而看到偵錯工具中斷。 您可以使用 UMDF 偵錯模式來關閉裝置共用。

若要使用偵錯模式,請使用 Visual Studio 中的 F5 選項,或在登錄中設定 DebugModeFlagsDebugModeBinaries 值。

如需 UMDF 登錄值的詳細資訊,請參閱偵錯 WDF 驅動程式的登錄值(KMDF 和 UMDF)。

使用 WinDbg 從主電腦遠端偵錯 (內核模式偵錯)

從遠端主機建立核心模式偵錯會話。 然後將目前進程設定為裝載驅動程式的 Wudfhost 實例。 如果您要從遠端核心偵錯工具進行偵錯,請將 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad 設定為 0x80000000,以指定不設置超時,同時進入核心偵錯工具。

採取以下步驟:

  1. 停用共用。 開啟 DebugModeFlags ,並在 DebugModeBinaries 中列出您的驅動程式。

  2. 如果您的驅動程式使用 UMDF 1.11 或更新版本,則預設會啟用 HostFailKdDebugBreak 。 略過此步驟。

    如果您的驅動程式使用 UMDF 1.9 或更早版本,請將 HostFailKdDebugBreak 設定為 1。

  3. 如果您要偵錯與逾時相關的問題,請關閉 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad。 (當 HostProcessDbgBreakOnDriverStartHostProcessDbgBreakOnDriverLoad 為非零時,框架會停用逾時,以防反射器在使用者模式偵錯工具連接至主機進程時終止主機。如果您需要偵錯驅動程式初始化代碼,建議在驅動程式載入之前,於 WinDbg 發出以下命令替代使用這兩個值:sxe ld:MyDriver.dll(模組載入時中斷)

  4. 如果您進行任何登錄變更,請重新啟動。

  5. 根據您在先前步驟中所做的選擇,當您的驅動程式在目標載入或卸載時,遠端核心除錯器將中斷。