Udostępnij przez


Korzystanie z rejestratora zdarzeń platformy

WDF zawiera wewnętrzny rejestrator śledzenia, czasami nazywany w ramach IFC rejestratorem w trakcie działania (IFR). Rejestrator WDF tworzy dziennik śledzenia zawierający najnowszą historię zdarzeń dla każdego sterownika WDF. Dzienniki śledzenia monitorują postęp pakietów żądań wejścia/wyjścia (IRP) w ramach frameworka oraz sposób obsługi tych żądań przez sterownik. Każdy sterownik Kernel-Mode Driver Framework (KMDF) i User-Mode Driver Framework (UMDF) ma własny dziennik.

Rejestrator WDF jest zawsze włączony. Dla każdego dziennika śledzenia rejestrator przechowuje rekordy zdarzeń w buforze pamięci cyklicznej. Opcjonalnie możesz włączyć szczegółowość, co spowoduje, że rejestrator zdarzeń zarejestruje dodatkowe informacje, które mogą pomóc w debugowaniu sterownika, takie jak wejścia i wyjścia ze ścieżek wewnętrznego kodu. Domyślnie rozmiar buforu to jedna strona pamięci, a szczegółowość jest wyłączona. Rozmiar i szczegółowość buforu można zmienić, dostosowując te wartości w aplikacji WdfVerifier. Należy pamiętać, że włączenie rozgadania może obniżyć wydajność całego systemu.

Rozszerzenia debugera WDF umożliwiają wyświetlanie i zapisywanie dziennika usługi WDF podczas interaktywnego debugowania. Aby wyświetlić dziennik usługi WDF podczas sesji debugowania:

  1. Załaduj poprawne symbole. Możesz użyć polecenia debugera symfix+ w celu dołączenia publicznego magazynu symboli firmy Microsoft do istniejącej ścieżki symboli. Publiczny magazyn symboli zawiera symbole plików binarnych usługi WDF. Możesz również załadować symbole dla symboli sterownika.

    Aby uzyskać dodatkowe informacje na temat uzyskiwania symboli okna i sposobu ustawiania ścieżki symboli debugera, zobacz dokumentację dostarczaną z pakietem Debugowanie systemu Windows .

  2. Załaduj bibliotekę rozszerzeniaWdfkd.dll do debugera. Jeśli używasz debugera jądra, możesz to zrobić za pomocą polecenia .load . Aby załadować poprawną wersję Wdfkd.dll, należy określić w pełni kwalifikowaną ścieżkę do biblioteki DLL. Na przykład, na maszynie hostującej debugera opartej na architekturze x86, użyj następującej ścieżki:

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

    Następnie możesz potwierdzić, że rozszerzenie zostało załadowane przy użyciu polecenia !chain , aby wyświetlić wszystkie załadowane rozszerzenia.

    Aby uzyskać więcej informacji na temat rozszerzenia debugera platformy, użyj rozszerzenia !wdfhelp . Aby uzyskać więcej informacji na temat debugera jądra, zobacz dokumentację dostarczaną z pakietem Debugowanie systemu Windows .

  3. Jeśli sterownik korzysta ze struktury w wersji 1.11 lub nowszej i korzystasz z debugera jądra z systemu Windows 8 lub nowszego, możesz pominąć ten krok.

    Jeśli sterownik używa wersji struktury starszej niż 1.11, użyj pliku !wdftmffile lub !wdfsearchpath , aby określić plik komunikatu śledzenia specyficznego dla platformy (.tmf) lub ścieżkę do pliku tmf. Pliki .tmf znajdują się w podkatalogach specyficznych dla platformy w zestawie WDK.

    Ponieważ pliki .tmf są specyficzne dla wersji, należy określić plik tmf, który odpowiada wersji biblioteki środowiska uruchomieniowego platformy, która jest aktualnie uruchomiona. Jeśli na przykład na maszynie hosta jest uruchomiona usługa KMDF w wersji 1.9:

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

    Możesz również ustawić ścieżkę wyszukiwania, ustawiając zmienną środowiskową TRACE_FORMAT_SEARCH_PATH. Polecenie !wdftmffile ma pierwszeństwo przed ścieżką wyszukiwania ustawioną przez zmienną środowiskową.

    Aby sprawdzić numer wersji platformy, możesz uruchomić polecenie rozszerzenia debugera !wdfldr z debugera jądra.

  4. Użyj rozszerzenia !wdflogdump , aby wyświetlić rekordy rejestratora zdarzeń. Na przykład poniższy zrzut ekranu okna polecenia WinDbg przedstawia typowy przykład danych wyjściowych programu !wdflogdump:

    Zrzut ekranu przedstawiający dane wyjściowe rozszerzenia !wdflogdump w oknie polecenia WinDbg.

Każdy wiersz w dzienniku frameworka jest poprzedzony ciągiem, który nazywany jest prefiksem komunikatu śledzenia. Rejestrator dziennika dodaje ten prefiks do każdej wiadomości zapisywanej w dzienniku. Domyślnie prefiks zawiera standardowy zestaw elementów danych, ale można zmienić domyślne elementy tak, aby odpowiadały konkretnym wymaganiom. Ciąg prefiksu sterownika WDF można zmienić, ustawiając zmienną środowiskową TRACE_FORMAT_PREFIX lub używając polecenia rozszerzenia debugera !wdfsettraceprefix .

Aby ustawić zmienną środowiskową, użyj polecenia podobnego do następującego:

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

To polecenie ustawia prefiks komunikatu śledzenia na następujące:

SourceFile_LineNumber: FunctionName: ProcessID.ThreadID: SystemTime

Możesz również użyć polecenia rozszerzenia !wdflogsave , aby zapisać rekordy rejestratora zdarzeń w pliku dziennika śledzenia zdarzeń (etl), który można wyświetlić za pomocą elementu TraceView.

Czasami można użyć rozszerzenia debugera !wdfcrashdump na zrzucie awaryjnym, aby wyświetlić informacje dziennika po sprawdzeniu błędów systemu. Informacje dziennika są dostępne w zrzucie awaryjnym tylko wtedy, gdy struktura może określić, że sterownik spowodował sprawdzenie usterek lub jeśli ustawiono wartość rejestru ForceLogsInMiniDump dla sterownika.

Jeśli debuger jest podłączony podczas wystąpienia błędu, możesz użyć polecenia !wdfcrashdump, aby natychmiast wyświetlić informacje dziennika, lub możesz wyświetlić informacje, ładując plik zrzutu pamięci. Ze względu na ograniczenia rozmiaru małego pliku zrzutu pamięci, dziennik sterownika, który spowodował awarię, może nie pojawić się w tym zrzucie.

Struktura może określić, czy określony sterownik spowodował następujące kody sprawdzania błędów:

Począwszy od wersji 2 UMDF, UMDF przechowuje dziennik śledzenia (lub UMDF IFR) w pamięci niestronicowanej jądra. Framework przydziela jedno IFR na instancję hosta sterownika (Wudfhost).

Aby uzyskać więcej informacji na temat poleceń rozszerzenia debugera, zobacz Debugger Extensions for Framework-based Drivers (Rozszerzenia debugera dla sterowników opartych na strukturze).