Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

WinDbg – od czego zacząć?

Zanim przystąpimy do analizy przypadków publikowanych przez Tess Ferrandez, myślę że przyda nam się wprowadzenie do konfiguracji i podstawowego użycia WinDbg.

W naszych rozważaniach będziemy zajmować się debugowaniem aplikacji zaimplementowanych w kodzie zarządzanym, działających w trybie użytkownika. Debugowanie programów działających w trybie jądra, np. sterowników, jest poza zakresem.

Konfiguracja WinDbg

1. Pobrać i zainstalować aktualną wersję WinDbg 32bit lub 64bit.

2. Założyć folder przeznaczony na pliki symboli, np. c:\debugging\symbols.

3. Zadeklarować globalną zmienną środowiskową o nazwie _NT_SYMBOL_PATH i przypisać jej wartość „srv*c:\debugging\symbols*http://msdl.microsoft.com/download/symbols”.
lub
Uruchomić WinDbg i wejść do menu "File -> Symbol File Path" i wpisać tam powyższą ścieżkę do symboli.

4. Jeżeli to wymagane, ustawić folder zawierający kod źródłowy w menu "File -> Source File Path."

Powyższa lista w żadnej mierze nie wyczerpuje dostępnych możliwości konfiguracyjnych, lecz pozwala szybko ustawić najbardziej potrzebne opcje i przystąpić do debugowania.

Debuger

Reguły nazewnictwa komend debugera

Polecenia

Standardowe polecenia debugera zwykle zaczynają się od litery, ale mogą również od innych znaków. Służą do kontroli pułapek, przeglądania pamięci, kontroli wątków debugowanego procesu, itp.

Metapolecenia

Zawsze rozpoczynają się od znaku „.” (kropki) i służą do sterowania debugerem, np.: .load ładuje bibliotekę rozszerzeniową do aktywnej sesji debugera.

Polecenia rozszerzone

Zawsze rozpoczynają się od znaku „!” (wykrzyknik). Zaimplementowane i udostępnione przez biblioteki rozszerzeniowe, np. SOS.dll.

Debugowanie

WinDbg umożliwia dwie metody debugowania aplikacji zarządzanych: załadowanie pliku zrzutu lub podłączenie do procesu.

Pliki zrzutu (crash dump)

Plik zrzutu zwykle tworzony jest w przypadku wystąpienia nieobsługiwanego wyjątku (Dr Watson 2) lub na żądanie użytkownika. Vista umożliwia utworzenie zrzutu procesu bezpośrednio z Task managera. W innych systemach lub bardziej zaawansowanych przypadkach (np. zrzutu warunkowego), należy użyć jednego z narzędzi pomocniczych jak ADPlus (http://support.microsoft.com/kb/286350) lub DebugDiag dla IIS (http://support.microsoft.com/kb/931370).

Podłączanie do procesu

W przypadku gdy nasza aplikacja jest już uruchomiona, podobnie jak w Visual Studio, możemy podłączyć się debugerem do procesu.

Wyróżniamy tutaj dwa tryby debugowania: inwazyjny i nieinwazyjny.

Tryb inwazyjny wykorzystuje Win32 Debugging API. Pozwala na przejęcie pełnej kontroli nad działaniem aplikacji i użycie wszystkich dostępnych poleceń debugera.

Tryb nieinwazyjny nie powoduje podłączenia się do procesu przy użyciu Win32 Debugging API, tylko wstrzymanie wykonania wszystkich wątków aplikacji i uzyskanie dostępu do pamięci procesu. Ten tryb ma minimalny wpływ na aplikację i jest przydatny np. w przypadku potrzeby podejrzenia aktualnego stanu wykonania, a następnie kontynuacji działania aplikacji. Udostępnia ograniczony zestaw poleceń debugera.

Podłączamy się do procesu poprzez „File -> Attach to process” lub klawisz F6 i wybór procesu który nas interesuje. Debuger domyślnie przyjmuje tryb inwazyjny – by skorzystać z trybu nieinwazyjnego, należy zaznaczyć checkbox „Noninvasive”.

Odłączenie od procesu realizuje polecenie „Debug -> Detach debuggee” lub „Debug -> Stop debugging.”

Wbudowany help i inne przydatne polecenia

Rozszerzenie Son of Strike (SOS) jest przeznaczone do interpretacji struktur zarządzanych przez CLR.

Każdy proces .net na wstępie swojego działania, rozwiązuje wersję CLR, którą powinien załadować i ją ładuje. SOS jest powiązany z określoną wersją .net, dlatego zanim przystąpimy do jego ładowania do debugera, należałoby ustalić jaką wersję CLR mamy w debugowanym procesie i jaka jest ścieżka do właściwej wersji SOSa. Jest to nieco uciążliwe, dlatego polecenie:

.loadby sos mscorwks

ładuje SOS do debugera, bazując na ścieżce obrazu biblioteki mscorwks (czyli CLRa), znakomicie upraszczając sprawę. Oczywiście do procesu mogła również zostać załadowana biblioteka mscorsvr…

!help

Wyświetla listę poleceń dostępnych w SOS.

!help [nazwa polecenia]

Wyświetla dokumentację wskazanego polecenia, np. !help GCRoot.

W następnym poście skupimy się na kilku najbardziej przydatnych poleceniach SOS, podłączymy się do małej, przykładowej aplikacji i obejrzymy ją sobie w WinDbg.

Opublikowane 9 sierpnia 2008 21:30 przez Bysza

Komentarze:

Brak komentarzy

Komentarze anonimowe wyłączone

About Bysza

http://www.linkedin.com/in/bysza