Wprowadzenie do debugowania systemu Windows
W tym artykule opisano, jak rozpocząć debugowanie dla systemu Windows. Jeśli twoim celem jest użycie debugera do analizowania zrzutu awaryjnego, zobacz Analizowanie plików zrzutu awaryjnego przy użyciu narzędzia WinDbg.
Aby rozpocząć debugowanie systemu Windows, wykonaj następujące kroki.
1. Instalowanie debugera systemu Windows
Aby uzyskać informacje na temat instalowania windbg, zobacz Install WinDbg.
2. Identyfikowanie hostów i systemów docelowych
Dwa oddzielne systemy komputerowe są zwykle używane do debugowania, ponieważ wykonywanie instrukcji na procesorze jest często wstrzymane podczas procesu. Debuger działa w systemie hosta , a kod, który chcesz debugować, jest uruchamiany w docelowym systemie .
serwer <--------------------------------------------------> docelowy
W niektórych sytuacjach można użyć maszyny wirtualnej jako drugiego systemu. Na przykład wirtualny komputer może działać na tym samym komputerze co kod, który należy debugować. Jeśli jednak kod komunikuje się ze sprzętem niskiego poziomu, użycie komputera wirtualnego może nie być najlepszym rozwiązaniem. Aby uzyskać więcej informacji, zobacz Konfigurowanie debugowania sieci maszyny wirtualnej — KDNET.
3. Określanie typu debugera: tryb jądra lub tryb użytkownika
Następnie należy określić, czy należy używać debugowania w trybie jądra, czy w trybie użytkownika.
System operacyjny i programy uprzywilejowane działają w trybie jądra . Kod trybu jądra ma uprawnienia dostępu do dowolnej części systemu i nie jest ograniczony jak kod trybu użytkownika. Kod trybu jądra może uzyskać dostęp do dowolnej części dowolnego innego procesu uruchomionego w trybie użytkownika lub w trybie jądra. Większość podstawowych funkcji systemu operacyjnego i wiele sterowników urządzeń sprzętowych działa w trybie jądra.
Aplikacje i podsystemy na komputerze działają w trybie użytkownika. Procesy uruchamiane w trybie użytkownika robią to we własnych wirtualnych przestrzeniach adresowych. Są one ograniczone do uzyskiwania bezpośredniego dostępu do wielu części systemu, w tym sprzętu systemowego, pamięci, która nie jest przydzielona do ich użycia, oraz innych części systemu, które mogą naruszyć integralność systemu. Procesy uruchamiane w trybie użytkownika są skutecznie odizolowane od systemu i z innych procesów trybu użytkownika, dzięki czemu nie mogą zakłócać tych zasobów.
Jeśli twoim celem jest debugowanie sterownika, ustal, czy sterownik jest sterownikiem trybu jądra lub sterownikiem trybu użytkownika. Sterowniki modelu sterowników systemu Windows (WDM) i Kernel-Mode Driver Framework (KMDF) są sterownikami trybu jądra. Jak sugeruje nazwa, sterowniki User-Mode Driver Framework (UMDF) są sterownikami trybu użytkownika.
W przypadku niektórych problemów trudno jest określić tryb wykonywany przez kod. W takim przypadku może być konieczne wybranie jednego trybu i sprawdzenie, jakie informacje są dostępne w tym trybie. Niektóre problemy wymagają użycia debugera zarówno w trybie użytkownika, jak i w trybie jądra.
W zależności od trybu debugowania może być konieczne skonfigurowanie i użycie debugerów na różne sposoby. Niektóre polecenia debugowania działają tak samo w obu trybach, a niektóre polecenia działają inaczej.
Dowiedz się więcej o korzystaniu z debugera w trybie jądra:
- Rozpocznij pracę z programem WinDbg (tryb jądra)
- Debugowanie uniwersalnych sterowników: laboratorium w formie krok po kroku (tryb jądra echo)
- Sterowniki do debugowania: instrukcja krok po kroku (tryb jądra Sysvad)
Dowiedz się więcej na temat korzystania z debugera w trybie użytkownika:
4. Wybierz środowisko debugera
Debuger WinDbg działa dobrze w większości sytuacji, ale czasami warto użyć innego debugera, takiego jak debugery konsoli na potrzeby automatyzacji lub programu Visual Studio. Aby uzyskać więcej informacji, zobacz Debugowanie środowisk.
5. Określanie sposobu nawiązywania połączenia z obiektem docelowym i hostem
Zazwyczaj systemy docelowe i systemy hostów są połączone przez sieć Ethernet. Jeśli wykonujesz wczesną pracę lub nie masz połączenia Ethernet na urządzeniu, dostępne są inne opcje połączenia sieciowego. Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Skonfiguruj debugowanie jądra sieci KDNET automatycznie
- Skonfiguruj debugowanie sieci dla maszyny wirtualnej — KDNET
6. Wybierz 32-bitowe lub 64-bitowe narzędzia do debugowania
Niezależnie od tego, czy potrzebujesz debugera 32-bitowego, czy 64-bitowego, zależy od wersji systemu Windows działającej na systemach docelowych i hostujących oraz od tego, czy debugujesz kod 32-bitowy, czy 64-bitowy. Aby uzyskać więcej informacji, zobacz Wybieranie 32-bitowych lub 64-bitowych narzędzi debugowania.
7. Konfigurowanie symboli
Aby użyć wszystkich zaawansowanych funkcji zapewnianych przez usługę WinDbg, należy załadować odpowiednie symbole. Jeśli nie masz poprawnie skonfigurowanych symboli, podczas próby użycia funkcji zależnych od symboli otrzymasz komunikaty wskazujące, że symbole nie są dostępne. Aby uzyskać więcej informacji, zobacz Symbole debugowania systemu Windows.
8. Konfigurowanie kodu źródłowego
Jeśli twoim celem jest debugowanie własnego kodu źródłowego, musisz skonfigurować ścieżkę do kodu źródłowego. Aby uzyskać więcej informacji, odwiedź ścieżkę źródłową.
9. Zapoznaj się z operacją debugera
W sekcji Operacji debugera tej dokumentacji opisano operację debugera dla różnych zadań. Na przykład Przechowywanie pliku dziennika w usłudze WinDbg opisuje sposób zapisywania pliku dziennika, który rejestruje sesję debugowania.
10. Zapoznaj się z technikami debugowania
standardowe techniki debugowania mają zastosowanie do większości scenariuszy debugowania, a przykłady obejmują ustawianie punktów przerwania, inspekcję stosu wywołań i znalezienie przecieku pamięci. wyspecjalizowane techniki debugowania mają zastosowanie do określonych technologii lub typów kodu. Przykłady obejmują debugowanie Plug and Play, debugowanie KMDF i debugowanie RPC.
11. Użyj poleceń referencyjnych debugera
Możesz użyć różnych poleceń debugowania podczas pracy w debugerze. Użyj polecenia .hh w debugerze, aby wyświetlić przydatne informacje na temat dowolnego polecenia debugowania. Aby uzyskać więcej informacji na temat dostępnych poleceń, zobacz Debugger reference.
12. Używanie rozszerzeń debugowania dla określonych technologii
Istnieje wiele rozszerzeń debugowania, które mogą służyć do analizowania struktur danych specyficznych dla domeny. Aby uzyskać więcej informacji, zobacz Wyspecjalizowane rozszerzenia. Ładowanie bibliotek DLL rozszerzenia debugera wyjaśnia sposób ładowania rozszerzeń debugera.
13. Dowiedz się więcej o powiązanych elementach wewnętrznych systemu Windows
W tej dokumentacji przyjęto założenie, że masz pewną wiedzę na temat podstawowych wewnętrznych systemów Windows. Aby dowiedzieć się więcej na temat wewnętrznych systemów Windows, w tym użycia pamięci, kontekstu, wątków i procesów, możesz przejrzeć zasoby, takie jak Windows Internals przez Pavel Yosifovich, Mark E. Russinovich, David A. Solomon i Alex Ionescu.
14. Przejrzyj dodatkowe zasoby debugowania
Inne zasoby obejmują następujące książki i filmy wideo:
- Debugowanie systemu Windows od kuchni: Praktyczne debugowanie i strategie śledzenia, autorstwa Tarik Soulami
- zaawansowane debugowanie systemu Windows przez Mario Hewardt i Daniel Pravat
- Defrag Tools seria wideo, od odcinka 13 do 29, wszystko o WinDbg
Zobacz też
- Rozpocznij pracę z narzędziem WinDbg (tryb jądra)
- rozpoczynanie pracy z usługą WinDbg (tryb użytkownika)
- wybierz narzędzia debugowania 32-bitowego lub 64-bitowego
- środowiska debugowania
- Konfigurowanie debugowania (tryb jądra i tryb użytkownika)
- Debugowanie uniwersalnych sterowników — laboratorium krok po kroku (tryb jądra z funkcją echo)
- Sterowniki do debugowania — laboratorium krok-po-kroku (tryb jądra Sysvad)