Udostępnij przez


Jak włączyć debugowanie sterownika UMDF

Poniższe konfiguracje umożliwiają debugowanie sterownika User-Mode Driver Framework (UMDF) podczas programowania. Wszystkie konfiguracje obejmują dwie maszyny, hosta i obiekt docelowy.

  • Ręcznie skopiuj sterownik do miejsca docelowego. Przeprowadź debugowanie w trybie użytkownika na obiekcie docelowym. W tym scenariuszu dołączasz ręcznie do wystąpienia procesu hosta sterownika uruchomionego na komputerze docelowym.
  • Ręcznie skopiuj sterownik do komputera docelowego, a następnie wykonaj debugowanie w trybie jądrowym z hosta.

Zalecamy przeprowadzenie wszystkich testów i rozwoju sterowników UMDF z dołączonym debugerem jądra.

Najlepsze rozwiązania

Zalecamy przeprowadzenie wszystkich testów sterowników UMDF z dołączonym debugerem jądra.

Zalecane są następujące ustawienia. Te ustawienia można ustawić ręcznie lub użyć narzędzia WDF Verifier Control Application (WDFVerifier.exe) w zestawie WDK, aby wyświetlić lub zmienić te ustawienia.

  • Włącz Weryfikator aplikacji na WUDFHost.exe:

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

    Jeśli wystąpią wyjątki, weryfikator aplikacji wysyła komunikaty diagnostyczne do debugera i przerywa działanie.

  • Jeśli używasz sesji debugowania w trybie jądra, ustaw parametr HostFailKdDebugBreak , tak aby refleksor przerywał debuger trybu jądra przed zakończeniem procesu hosta sterownika. To ustawienie jest domyślnie włączone, począwszy od systemu Windows 8.

  • Wyłącz udostępnianie, ustawiając wartość UmdfHostProcessSharing na ProcessSharingDisabled. Aby uzyskać informacje, zobacz Określanie dyrektyw WDF w plikach INF.

  • Domyślnie w przypadku niepowodzenia urządzenia UMDF struktura próbuje uruchomić go maksymalnie pięć razy. Możesz wyłączyć automatyczne ponowne uruchamianie, ustawiając wartość DebugModeFlags na 0x01. Aby uzyskać więcej informacji, zobacz wartości rejestru debugowania sterowników WDF .

  • Uruchom ponownie komputer.

  • Aby uzyskać informacje o debugowaniu problemów ze sterownikiem UMDF, zapoznaj się z Określaniem przyczyny przerwania procesu hosta i Debugowaniem awarii sterownika UMDF

Ręczne dołączanie przy użyciu narzędzia WinDbg (debugowanie w trybie użytkownika)

Na maszynie docelowej można ręcznie dołączyć WinDbg do wystąpienia WUDFHost, które obsługuje sterownik. Po dołączeniu możesz przejść do debugera i ustawić punkty przerwania w swoim sterowniku.

Ponieważ inicjowanie sterownika odbywa się wkrótce po załadowaniu WUDFHost, nie możesz dołączyć ręcznie na czas, aby debugować kod inicjowania. Zamiast tego ustaw wartość rejestru, aby spowodować, że proces hosta będzie oczekiwał określoną liczbę sekund podczas inicjalizacji hosta lub ładowania sterownika. To opóźnienie daje czas na dołączenie WinDbg do poprawnego wystąpienia procesu WUDFHost.

Wykonaj te kroki:

  1. W rejestrze na komputerze docelowym ustaw HostProcessDbgBreakOnStart lub HostProcessDbgBreakOnDriverLoad na wartość odpowiadającą liczbie sekund i zrestartuj komputer.
  2. Na komputerze docelowym otwórz windbg jako administrator.
  3. W menu Plik wybierz pozycję Dołącz do procesu. Wybierz opcję Według pliku wykonywalnego i zlokalizuj wszystkie procesy o nazwie WUDFHost.exe (mogą nie istnieć żadne). Jeśli istnieją jakiekolwiek procesy o nazwie WUDFHost.exe, zanotuj ich identyfikatory do przyszłego odniesienia.
  4. W Menedżerze urządzeń włącz sterownik.
  5. Powtórz krok 2 i znajdź nowe wystąpienie WUDFHost.exe. Jeśli nie widzisz nowego wystąpienia WUDFHost.exe, wybierz pozycję Anuluj i ponownie wybierz pozycję Dołącz do procesu . Po znalezieniu nowego wystąpienia WUDFHost.exe, wybierz je i wybierz OK.

Jeśli pula urządzeń jest używana i ustawiono wartość rejestru HostProcessDbgBreakOnDriverLoad, możesz napotkać przełamania debugera z powodu ładowania się innych sterowników. Scalanie urządzeń można wyłączyć przy użyciu trybu debugowania UMDF.

Aby użyć trybu debugowania, użyj opcji F5 w programie Visual Studio lub ustaw wartości DebugModeFlags i DebugModeBinaries w rejestrze.

Aby uzyskać szczegółowe informacje o wartościach rejestru UMDF, zobacz Wartości rejestru debugowania sterowników WDF (KMDF i UMDF).

Zdalne debugowanie z maszyny hosta (debugowanie w trybie jądra) przy użyciu narzędzia WinDbg

Na hoście zdalnym ustanów sesję debugowania trybu jądra. Następnie ustaw bieżący proces na wystąpienie programu Wudfhost, które hostuje sterownik. Jeśli debugujesz z debugera zdalnego jądra, ustaw parametr HostProcessDbgBreakOnDriverStart lub HostProcessDbsBreakOnDriverLoad na 0x80000000, aby określić brak limitu czasu, ale przerwać debuger jądra.

Wykonaj następujące kroki:

  1. Wyłącz scalanie. Włącz DebugModeFlags i umieść swój sterownik w DebugModeBinaries.

  2. Jeśli sterownik używa UMDF 1.11 lub nowszego, hostFailKdDebugBreak jest domyślnie włączony. Pomiń ten krok.

    Jeśli sterownik używa funkcji UMDF 1.9 lub starszej, ustaw wartość HostFailKdDebugBreak na 1.

  3. Jeśli debugujesz problemy związane z przekroczeniami limitu czasu, wyłącz pozycję HostProcessDbgBreakOnDriverStart i HostProcessDbgBreakOnDriverLoad. (Jeśli HostProcessDbgBreakOnDriverStart lub HostProcessDbgBreakOnDriverLoad jest inny niż zero, platforma wyłącza limity czasu, aby reflektor nie zakończył procesu hosta, gdy do procesu hosta jest dołączony debuger działający w trybie użytkownika). Jeśli musisz debugować kod inicjowania sterownika, zamiast używać tych dwóch wartości, spróbuj wydać następujące polecenie w WinDbg przed załadowaniem sterownika: sxe ld:MyDriver.dll (przerwanie załadowania modułu)

  4. Uruchom ponownie, jeśli wprowadzono jakiekolwiek zmiany w rejestrze.

  5. W zależności od wybranych opcji w poprzednich krokach debuger zdalnego jądra przerywa działanie, gdy sterownik ładuje lub zwalnia element docelowy.