您可以在開發期間,使用下列設定來偵錯 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 進程的正確實例。
請遵循下列步驟:
- 在目標電腦上的登錄中,將 HostProcessDbgBreakOnStart 或 HostProcessDbgBreakOnDriverLoad 設定為一些秒數並重新啟動。
- 在目標計算機上,以系統管理員身分開啟 WinDbg。
- 在 [ 檔案] 功能表上,選擇 [ 附加至進程]。 選取 [依可執行檔],並找出所有名為 WUDFHost.exe 的進程(可能沒有任何)。 如果有任何名為 WUDFHost.exe的進程,請記下其進程標識碼以供日後參考。
- 在設備管理員中,啟用驅動程式。
- 重複步驟 2,並找出 WUDFHost.exe的新實例。 如果您沒有看到 WUDFHost.exe的新執行個體,請選取 [取消],然後再次選擇 [附加至程序 ]。 當您找到新的 WUDFHost.exe 執行個體時,選取它,然後選擇 確定。
如果 正在使用裝置集區 ,而且您設定 HostProcessDbgBreakOnDriverLoad 登錄值,您可能會因為載入其他驅動程式而看到偵錯工具中斷。 您可以使用 UMDF 偵錯模式來關閉裝置共用。
若要使用偵錯模式,請使用 Visual Studio 中的 F5 選項,或在登錄中設定 DebugModeFlags 和 DebugModeBinaries 值。
如需 UMDF 登錄值的詳細資訊,請參閱偵錯 WDF 驅動程式的登錄值(KMDF 和 UMDF)。
使用 WinDbg 從主電腦遠端偵錯 (內核模式偵錯)
從遠端主機建立核心模式偵錯會話。 然後將目前進程設定為裝載驅動程式的 Wudfhost 實例。 如果您要從遠端核心偵錯工具進行偵錯,請將 HostProcessDbgBreakOnDriverStart 或 HostProcessDbgBreakOnDriverLoad 設定為 0x80000000,以指定不設置超時,同時進入核心偵錯工具。
採取以下步驟:
停用共用。 開啟 DebugModeFlags ,並在 DebugModeBinaries 中列出您的驅動程式。
如果您的驅動程式使用 UMDF 1.11 或更新版本,則預設會啟用 HostFailKdDebugBreak 。 略過此步驟。
如果您的驅動程式使用 UMDF 1.9 或更早版本,請將 HostFailKdDebugBreak 設定為 1。
如果您要偵錯與逾時相關的問題,請關閉 HostProcessDbgBreakOnDriverStart 和 HostProcessDbgBreakOnDriverLoad。 (當 HostProcessDbgBreakOnDriverStart 或 HostProcessDbgBreakOnDriverLoad 為非零時,框架會停用逾時,以防反射器在使用者模式偵錯工具連接至主機進程時終止主機。如果您需要偵錯驅動程式初始化代碼,建議在驅動程式載入之前,於 WinDbg 發出以下命令替代使用這兩個值:sxe ld:MyDriver.dll(模組載入時中斷)
如果您進行任何登錄變更,請重新啟動。
根據您在先前步驟中所做的選擇,當您的驅動程式在目標載入或卸載時,遠端核心除錯器將中斷。