Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten temat zawiera samouczek wideo pokazujący, jak debugować sterownik Windows Driver Frameworks (WDF) z pełnym dostępem do kodu źródłowego usługi WDF. Poniżej przedstawiono procedurę krok po kroku wykonaną w filmie wideo, aby uzyskać wygodne informacje.
Debugowanie źródłowe WDF umożliwia swobodne przechodzenie poprzez kod frameworku bez konieczności pobierania jego kodu źródłowego. Debuger automatycznie pobiera poprawną wersję usługi WDF z usługi GitHub.
Jeśli na przykład używasz WinDbg do debugowania sterownika WDF na maszynie z systemem Windows 10, a debuger zostanie zatrzymany w kodzie struktury na stosie wywołań, możesz dwukrotnie kliknąć ramkę WDF w widoku stosu wywołań, a WinDbg automatycznie pobierze i otworzy odpowiedni plik źródłowy WDF w odpowiadającym wierszu. Następnie możesz przejść przez kod i ustawić punkty przerwania.
Ta funkcja jest dostępna dla systemów docelowych z publicznymi wersjami systemu Windows 10, począwszy od wersji kompilacji Technical Preview 10041 lub nowszej. Te kompilacje mają pliki symboli indeksowanych przez prywatne źródła dla usługi KMDF (Wdf01000.sys) i UMDF (Wudfx02000.dll) dostępne na publicznym serwerze symboli firmy Microsoft. Debugowanie kodu WDF na poziomie źródłowym jest dostępne tylko w usłudze WinDbg, a nie w debugerze programu Visual Studio.
Szybki start
Uruchom sesję debugowania jądra WinDbg na maszynie docelowej, przerwij i wykonaj następujące kroki:
Ustaw domyślną ścieżkę symbolu przy użyciu pliku symfix. Spowoduje to ustawienie ścieżki symboli tak, aby wskazywała serwer symboli na https://msdl.microsoft.com/download/symbols.
kd> .symfixUstaw domyślną ścieżkę źródłową przy użyciu pliku srcfix. Spowoduje to ustawienie ścieżki źródłowej do pliku srv*, który nakazuje debugerowi pobranie plików źródłowych z lokalizacji określonych w plikach symboli modułów docelowych.
kd> .srcfix Source search path is: SRV*Załaduj ponownie symbole przy użyciu funkcji .reload i upewnij się, że symbole Wdf01000.sys (lub Wudfx02000.dll dla usługi UMDF) są indeksowane źródłami. Jak pokazano w danych wyjściowych !lmi poniżej, Wdf01000.sys PDB jest indeksowany źródłowo. Jeśli nie, zapoznaj się z sekcją Konfiguracja usługi WinDbg poniżej.
kd> .reload ... kd> !lmi wdf01000.sys Loaded Module Info: [wdf01000.sys] ... Load Report: private symbols & lines, source indexed C:\...\Wdf01000.pdb\...\Wdf01000.pdbTeraz wszystko jest gotowe! Łatwym sposobem na przejście przez kod źródłowy usługi WDF jest ustawienie punktu przerwania w procedurze wysyłania IRP platformy, a następnie przejście przez pozostałą część kodu. Ponieważ system Windows ma wiele wbudowanych sterowników KMDF, WDF jest zawsze ładowany i uruchamiany, więc punkt przerwania zostanie aktywowany od razu (bez konieczności ładowania własnego sterownika).
kd> bp Wdf01000!FxDevice::DispatchWithLock kd> g Breakpoint 0 hit Wdf01000!FxDevice::DispatchWithLock: 87131670 8bff mov edi,edi
Jeśli to nie zadziała, zapoznaj się z poniższymi krokami instalacji windbg.
Konfiguracja WinDbg
Jeśli powyższy przykład nie zadziałał zgodnie z oczekiwaniami, może być konieczne wykonanie co najmniej jednej z poniższych instrukcji.
Włącz debugowanie w trybie źródłowym
Upewnij się, że debugowanie w trybie źródłowym jest włączone. Otwórz menu Debuguj i upewnij się, że zaznaczono opcję Tryb źródłowy.
Wyczyść zestarzałe symbole z pamięci podręcznej
Jeśli wcześniej debugowałeś sterowniki WDF dla tego samego systemu docelowego Windows, możesz używać lokalnie buforowanych symboli WDF, które nie były indeksowane w źródle. Możesz to sprawdzić za pomocą polecenia !lmi:
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Zgodnie z powyższym raportem ładowania, plik Wdf01000.pdb nie jest indeksowany względem kodu źródłowego. Oznacza to, że lokalna pamięć podręczna symboli WinDbg jest nieaktualna. Aby rozwiązać ten problem, zwolnij PDB z WinDbg, wyczyść lokalną pamięć podręczną (ścieżka może się różnić w zależności od wyników !lmi powyżej) i załaduj ponownie PDB:
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Teraz uruchom polecenie !lmi, aby sprawdzić ponownie: plik PDB powinien być wyświetlany jako indeksowany jako źródło, a okno kodu źródłowego powinno pojawić się.
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Debugowania na poziomie źródła WDF można używać nie tylko do debugowania na żywo i analizowania zrzutów awaryjnych, ale także aby dowiedzieć się więcej na temat wewnętrznych mechanizmów struktury, ustawiając punkty przerwania w podstawowych funkcjach, takich jak dyspozytor IRP, i analizować kolejne ścieżki kodu.