Idź do
• Spis treści
• Przykładowy rozdział
Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
© Helion 1991–2010
Katalog książek
Twój koszyk
Cennik i informacje
Czytelnia
Kontakt
Debugowanie .NET.
Zaawansowane techniki
diagnostyczne
Autor:
Tłumaczenie: Łukasz Piwko
ISBN: 978-83-246-2721-9
Tytuł oryginału:
Format: 168×237, stron: 528
Sprawdź, jak rozwiązują problemy najlepsi specjaliści!
• Jak stworzyć niezawodny kod?
• Jak rozwiązywać problemy z synchronizacją wątków?
• Jak wykorzystać usługę raportowania błędów?
Czy znasz programistę, który nigdy w życiu nie użył debuggera? Dzisiejsze rozbudowane
i skomplikowane systemy informatyczne wymagają znakomitej znajomości zaawansowanych
narzędzi diagnostycznych. Bez nich wykrycie nawet najprostszego potknięcia mogłoby zająć długie
godziny, jeśli nie dni, a poświęcony czas wcale nie gwarantowałby sukcesu. Niestety, posługiwanie
się zaawansowanymi narzędziami wymaga równie zaawansowanej wiedzy. Jeśli nie masz pewności,
czy zgromadziłeś już wszystkie potrzebne Ci informacje, sięgnij po tę książkę – pozwoli to
błyskawicznie uzupełnić brakujące dane!
W pierwszej części książki będziesz mógł zapoznać się z podstawami programowania oraz
narzędziami wykorzystywanymi w codziennej pracy programisty. Poznasz między innymi metody
sterowania wykonywaniem programu, techniki inspekcji obiektowej, sposoby operowania na
wątkach oraz polecenia diagnostyczne platformy .NET. Część druga zawiera obszerny zakres
informacji dotyczących praktycznych aspektów diagnostyki oprogramowania. Dowiesz się, jak
wykrywać błędy w zarządzaniu stertą, jak rozwiązywać kłopoty z pamięcią oraz jak radzić sobie
z najbardziej skomplikowanymi problemami dotyczącymi wątków. Na samym końcu zapoznasz
się z zaawansowanymi zagadnieniami diagnostyki oprogramowania, takimi jak usługi raportowania
błędów, pliki obrazu oraz wyczerpujące opisy najlepszych narzędzi. W książce „Debugowanie .NET.
Zaawansowane techniki diagnostyczne” znajdziesz między innymi takie zagadnienia:
• Podstawowe informacje o dostępnych narzędziach
• Podstawy CLR
• Techniki diagnostyczne – sterowanie wykonaniem programu, punkty wstrzymania
• Inspekcja obiektowa oraz inspekcja kodu
• Dostępne polecenia wewnętrzne CLR oraz polecenia diagnostyczne
• Techniki odzyskiwania pamięci
• Rozwiązywanie problemów z synchronizacją wątków
• Metody diagnozowania wycieków interoperacyjności
• Wykorzystanie plików obrazu
• Generowanie zrzutów z wykorzystaniem debuggera
• Wykorzystanie usługi raportowania błędów
• Dostępne dodatkowe narzędzia, wspierające proces diagnostyczny
Twórz niezawodne oprogramowanie!
7
S
PIS TREŚCI
Przedmowa
...........................................................................17
Wstęp
....................................................................................19
Podziękowania
.....................................................................29
O
autorze
..............................................................................31
C
ZĘŚĆ
I P
ODSTAWY
...................................................................................33
Rozdział 1. Podstawowe wiadomości o narzędziach ..............................35
Debugging Tools for Windows ................................................................................ 36
.NET 2.0 — Redistributable ........................................................................................ 37
.NET 2.0 — SDK .............................................................................................................. 38
SOS ..................................................................................................................................... 40
SOSEX ................................................................................................................................ 42
CLR Profiler ...................................................................................................................... 43
Mierniki wydajności ...................................................................................................... 46
Reflector for .NET ........................................................................................................... 47
PowerDbg ........................................................................................................................ 48
Managed Debugging Assistants .............................................................................. 50
Podsumowanie .............................................................................................................. 53
Rozdział 2. Podstawy CLR .......................................................................55
Przegląd wysokopoziomowy .................................................................................... 55
CLR i program ładujący Windows ............................................................................ 59
Ładowanie obrazów rodzimych ........................................................................ 60
Ładowanie zestawów .NET .................................................................................. 62
Domeny aplikacji ........................................................................................................... 66
Systemowa domena aplikacji ............................................................................ 69
Wspólna domena aplikacji ......................................................................................... 70
Domyślna domena aplikacji ............................................................................... 70
8
S
P I S T R E C I
Zestawy ............................................................................................................................ 70
Manifest zestawu .......................................................................................................... 72
Metadane typu ........................................................................................................ 74
Tabela bloku synchronizacji ............................................................................... 81
Uchwyt do typu ...................................................................................................... 85
Deskryptory metod ................................................................................................ 92
Moduły ....................................................................................................................... 93
Tokeny metadanych .............................................................................................. 96
EEClass ....................................................................................................................... 98
Podsumowanie ............................................................................................................100
Rozdział 3. Podstawowe techniki diagnostyczne .................................101
Debuger i proces docelowy debugera ................................................................101
Symbole .........................................................................................................................106
Sterowanie wykonywaniem programu ...............................................................109
Przerywanie wykonywania ...............................................................................109
Wznawianie wykonywania ................................................................................110
Przemierzanie kodu .............................................................................................112
Kończenie sesji diagnostycznej .......................................................................116
Ładowanie rozszerzeń kodu zarządzanego .......................................................116
Ładowanie rozszerzenia SOS ............................................................................118
Ładowanie rozszerzenia SOSEX .......................................................................120
Kontrolowanie procesu debugowania CLR .......................................................121
Ustawianie punktów wstrzymania ........................................................................121
Punkty wstrzymania na funkcjach skompilowanych
przez kompilator JIT ............................................................................................124
Punkty wstrzymania na funkcjach jeszcze nieskompilowanych ..........127
Punkty wstrzymania w zestawach prekompilowanych ..........................130
Punkty wstrzymania na metodach uogólnionych ....................................133
Inspekcja obiektowa ..................................................................................................134
Zrzucanie pamięci surowej ...............................................................................137
Zrzuty typów wartościowych ...........................................................................140
Zrzuty podstawowych typów referencyjnych ............................................146
Zrzuty tablic ...........................................................................................................147
Zrzuty obiektów na stosie .................................................................................153
Sprawdzanie rozmiarów obiektów ................................................................155
Zrzuty wyjątków ...................................................................................................156
Operacje na wątkach .................................................................................................161
Polecenie ClrStack ................................................................................................162
Polecenie Threads ................................................................................................165
Polecenie DumpStack .........................................................................................169
Polecenie EEStack ................................................................................................171
COMState ................................................................................................................171
Inspekcja kodu .............................................................................................................172
Dezasemblacja kodu ...........................................................................................172
Wydobywanie deskryptora metod z adresu kodu ....................................174
Wyświetlanie instrukcji języka pośredniego ...............................................175
S
P I S T R E C I
9
Polecenia wewnętrzne CLR .....................................................................................175
Sprawdzanie wersji CLR .....................................................................................176
Znajdowanie deskryptora metod po nazwie ..............................................176
Wykonywanie zrzutu bloku synchronizacji obiektu .................................177
Wykonywanie zrzutu tabeli metod obiektu ................................................177
Wykonywanie zrzutu informacji o stercie zarządzanej
i systemie odzyskiwania pamięci ....................................................................178
Polecenia diagnostyczne ..........................................................................................178
Znajdowanie domeny aplikacji obiektu .......................................................179
Informacje o procesie .........................................................................................179
Polecenia rozszerzenia SOSEX ................................................................................180
Rozszerzona obsługa punktów wstrzymania .............................................180
Zarządzane metadane ........................................................................................184
Dane stosu ..............................................................................................................185
Inspekcja obiektów ..............................................................................................187
Automatyczne wykrywanie zakleszczeń ......................................................188
Polecenia dotyczące sterty zarządzanej
i systemu odzyskiwania pamięci .....................................................................190
Zapisywanie zrzutów awaryjnych w plikach ......................................................192
Podsumowanie ............................................................................................................194
C
ZĘŚĆ
II D
IAGNOSTYKA STOSOWANA
............................................................... 195
Rozdział 4. Program ładujący zestawy ..................................................197
Informacje wstępne ...................................................................................................197
Tożsamość zestawu .............................................................................................198
Globalny bufor zestawów ..................................................................................202
Domyślny kontekst ładowania ........................................................................205
Kontekst „load-from” ..........................................................................................206
Kontekst „load-without” ....................................................................................207
Prosty błąd ładowania zestawu ..............................................................................207
Błąd kontekstu ładowania ........................................................................................214
Interoperacyjność i wyjątek DllNotFoundException ......................................222
Debugowanie LCG ......................................................................................................224
Podsumowanie ............................................................................................................229
Rozdział 5. Sterta zarządzana i odzyskiwanie pamięci .........................231
Architektura pamięci systemu Windows ............................................................232
Alokowanie pamięci ............................................................................................236
System odzyskiwania pamięci ................................................................................241
Pokolenia .................................................................................................................242
Korzenie ...................................................................................................................251
Finalizacja ................................................................................................................258
10
S
P I S T R E C I
Odzyskiwanie pamięci ........................................................................................267
Sterta obiektów dużych .....................................................................................269
Unieruchamianie obiektów ..............................................................................274
Tryby odzyskiwania pamięci .............................................................................280
Diagnozowanie uszkodzonej sterty zarządzanej .............................................281
Diagnozowanie fragmentacji sterty zarządzanej .............................................289
Diagnozowanie wyjątków braku pamięci ..........................................................298
Podsumowanie ............................................................................................................316
Rozdział 6. Synchronizacja ...................................................................317
Podstawy synchronizacji ..........................................................................................317
Mechanizmy synchronizacji wątków ....................................................................318
Zdarzenia ................................................................................................................323
Muteksy ...................................................................................................................325
Semafory .................................................................................................................326
Monitory ..................................................................................................................327
ReaderWriterLock(Slim) ......................................................................................328
Pula wątków ...........................................................................................................330
Wewnętrzne mechanizmy synchronizacji ..........................................................331
Nagłówek obiektu ................................................................................................331
Bloki synchronizacji .............................................................................................333
Blokady lekkie ........................................................................................................337
Scenariusze synchronizacji ......................................................................................341
Proste zakleszczenie ............................................................................................341
Wyjątki blokad porzuconych ............................................................................349
Anulowanie wątków ...........................................................................................354
Zawieszenie finalizatora .....................................................................................358
Podsumowanie ............................................................................................................366
Rozdział 7. Interoperacyjność ...............................................................369
P/Invoke .........................................................................................................................369
Interoperacyjność COM ............................................................................................376
Opakowanie wywoływane w czasie wykonywania ..................................377
Diagnozowanie wywołań P/Invoke ......................................................................382
Konwencje wywoływania ..................................................................................383
Delegaty ..................................................................................................................388
Diagnozowanie wycieków interoperacyjności .................................................396
Diagnozowanie finalizacji interoperacyjności COM ........................................402
Podsumowanie ............................................................................................................411
S
P I S T R E C I
11
C
ZĘŚĆ
III T
ECHNIKI ZAAWANSOWANE
............................................................... 413
Rozdział 8. Debugowanie poawaryjne ..................................................415
Pliki obrazu — podstawowe wiadomości ..........................................................416
Generowanie zrzutów przy użyciu debugera .............................................418
Generowanie plików zrzutu za pomocą narzędzia ADPlus ....................425
Diagnozowanie plików zrzutu .........................................................................427
Warstwa dostępu do danych ...........................................................................428
Analizowanie plików zrzutu — nieobsłużone wyjątki .NET ...................432
Usługa raportowania błędów .................................................................................433
Architektura usługi Windows Error Reporting ...........................................434
Podsumowanie ............................................................................................................461
Rozdział 9. Narzędzia dodatkowe .........................................................463
PowerDbg ......................................................................................................................463
Instalowanie narzędzia PowerDbg .................................................................464
Polecenie Analyze-PowerDbgThreads ..........................................................466
Polecenie Send-PowerDbgCommand ..........................................................467
Rozszerzanie PowerDbg ....................................................................................469
Visual Studio .................................................................................................................472
Integracja z SOS ....................................................................................................472
Debugowanie platformy .NET na poziomie kodu źródłowego ............476
Visual Studio 2010 ................................................................................................479
Program profilujący CLR ...........................................................................................484
Uruchamianie programu profilującego CLR ...............................................484
Widok podsumowania .......................................................................................486
Widoki histogramu ..............................................................................................488
Widoki wykresów .................................................................................................489
WinDbg i polecenie cmdtree ..................................................................................491
Podsumowanie .............................................................................................................493
Rozdział 10. CLR 4.0 ................................................................................495
Narzędzia .......................................................................................................................495
Debugging Tools for Windows ........................................................................496
Pakiet .NET 4.0 Redistributable ........................................................................496
SOS ............................................................................................................................496
Sterta zarządzana i odzyskiwanie pamięci .........................................................497
Rozszerzone narzędzia diagnostyczne .........................................................498
Odzyskiwanie pamięci w tle .............................................................................503
12
S
P I S T R E C I
Synchronizacja .............................................................................................................504
Pula wątków i zadań ............................................................................................505
Monitor ....................................................................................................................505
Bariera ......................................................................................................................506
Klasa CountdownEvent ......................................................................................507
Klasa ManualResetEventSlim ...........................................................................507
Klasa SemaphoreSlim .........................................................................................507
Klasy SpinWait i SpinLock ..................................................................................507
Interoperacyjność .......................................................................................................508
Debugowanie poawaryjne ......................................................................................509
Podsumowanie ............................................................................................................510
Skorowidz
...........................................................................511
415
R O Z D Z I A 8
D
EBUGOWANIE POAWARYJNE
W poprzednich dwóch czciach ksiki poznalimy wiele znakomitych na-
rzdzi wspomagajcych w pracy programist diagnozujcego aplikacje. Na-
rzdzia te naley wczy do procesu rozwoju oprogramowania, aby zapewni
jak najwyszy stopie jego niezawodnoci. Mimo i wszystkie te narzdzia
stanowi doskona pomoc w znajdowaniu bdów poprzez automatyzowanie
procesu ich wyszukiwania, nie gwarantuj, e gotowy produkt bdzie ab-
solutnie bezbdny.
Po dostarczeniu programu do uytkowników problemy pojawi si na
pewno i najprawdopodobniej stanie si to w najmniej oczekiwanym mo-
mencie — najczciej podczas pracy uytkownika. W zalenoci od rodzaju
bd moe cakowicie zniechci uytkownika do dalszego korzystania
z programu lub tylko nieco uprzykrzy mu ycie. W obu tych przypadkach
mona si spodziewa telefonu od zdenerwowanego klienta dajcego wy-
janie, czemu jego produkt nie dziaa tak, jak powinien. Jedn z moliwoci
w takiej sytuacji jest poproszenie go o zdalny dostp do jego komputera.
Mimo i czasami jest to moliwe, uytkownicy najczciej podchodz do tego
niechtnie i nie zgadzaj si na takie rozwizanie. Powodów, dla których
klienci nie chc umoliwia dostpu do swoich komputerów, jest wiele.
Poniej przedstawiam kilka najczstszych z nich:
Zasady ustalone w firmie nie pozwalaj na przyjmowanie pocze
przychodzcych.
Zdalne diagnozowanie wymaga podczenia debugera do jednego lub
wikszej liczby procesów, co oznacza przestój w pracy. Jeli proces,
który ma zosta zdiagnozowany, dziaa na wanym serwerze, klient nie
bdzie chcia zaakceptowa na nim przestoju.
Diagnozowanie procesu poprzez tryb uytkownika lub jdra oznacza,
e programici maj peny dostp do stanu urzdzenia, wcznie z za-
wartoci jego pamici. Niektórzy uytkownicy mog obawia si
w takim przypadku naruszenia prywatnoci.
416
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Jeli klient odmówi dostpu zdalnego, a odtworzenie problemu na lokal-
nym komputerze jest niemoliwe, to czy w ogóle da si co zrobi? Tak,
naley wówczas zastosowa techniki tzw. debugowania poawaryjnego (ang.
postmortem debugging). Proces ten skada si z nastpujcych etapów:
1.
Wywoanie awarii.
2.
Wykonanie zrzutu (obrazu) stanu systemu w chwili awarii (albo
— w niektórych przypadkach — przed awari i po niej).
3.
Przesanie zrzutu do przeanalizowania specjalistom.
W tym rozdziale zostay opisane róne sposoby wykonywania takich
zrzutów — czasami nazywanych plikami obrazu — róne rodzaje tych obra-
zów oraz techniki ich analizowania. Ponadto poznamy znakomit usug
gromadzenia plików obrazu o nazwie Windows Error Reporting.
Zaczniemy od podstawowych zagadnie zwizanych z plikami obrazu.
Pliki obrazu — podstawowe wiadomości
Jak ju wiemy, plik obrazu stanowi reprezentacj stanu okrelonego procesu.
Pliki takie tworzy si przede wszystkim w celu umoliwienia diagnozowania
aplikacji, gdy nie ma moliwoci przeprowadzenia diagnostyki na dziaajcym
programie. Wygenerowany plik obrazu wysya si do specjalisty, który anali-
zuje jego zawarto, nie majc dostpu do urzdzenia, na którym wystpi
problem. Praca ta polega na zapisaniu pliku na innym komputerze i analizo-
waniu go za pomoc narzdzi do diagnozowania poawaryjnego debugera.
Jakie informacje zawiera taki plik obrazu? To zaley od sposobu jego utwo-
rzenia. Wyrónia si dwa gówne rodzaje plików obrazu:
pene zrzuty,
zrzuty minimalne.
Peny zrzut zawiera ca przestrze pamici procesu, obraz pliku wy-
konywalnego, tabel uchwytów i inne informacje wykorzystywane przez
debugery. Przy generowaniu penego zrzutu nie ma moliwoci wybierania,
które informacje maj zosta zapisane. Plik taki mona jednak przekonwer-
towa na zrzut minimalny za pomoc debugera.
Minimalny plik zrzutu moe zawiera róne informacje, których wybór
jest dokonywany przez modu generujcy. Plik taki moe zawiera zarówno
informacje o konkretnym wtku, jak i peny opis obrazowanego procesu.
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
417
Moe to zabrzmi dziwnie, ale najwikszy moliwy minimalny plik zrzutu
moe zawiera wicej informacji ni zrzut peny. Dlatego w tej czci roz-
dziau skoncentruj si na zrzutach minimalnych.
Narzdzia, za pomoc których mona generowa takie pliki, zostay
zwi le opisane w tabeli 8.1.
Tabela 8.1.
Narzędzia do generowania zrzutów
Nazwa
Opis
Debugery Windows
Debugery systemu Windows umoliwiaj tworzenie zrzutów
o rónych rozmiarach oraz pozwalaj kontrolowa cay proces
generowania pliku
ADPlus
ADPlus to skadnik pakietu Debugging Tools for Windows.
Narzdzie to moe dziaa jako monitor systemu wykonujcy zrzut
w chwili wystpienia awarii lub zawieszenia. Ponadto program
ten ma opcj powiadamiania o wystpieniu awarii
Windows
Error Reporting
Windows Error Reporting to usuga firmy Microsoft umoliwiajca
zarejestrowanie si w witrynie do raportowania bdów.
Gdy w której z aplikacji danego uytkownika wystpi awaria,
z komputera, w którym ona dziaa, wysyany jest raport do witryny
Windows Error Reporting (WER). Nastpnie uytkownik moe
pobra ten raport z witryny WER wraz z plikiem zrzutu w celu
jego przeanalizowania
W tym podrozdziale nauczymy si generowa pliki obrazu za pomoc
debugerów Windows i narzdzia ADPlus. Usuga Windows Error Repor-
ting zostanie opisana nieco dalej.
W celu zilustrowania procesu tworzenia plików obrazu wykorzystamy
przykadow prost aplikacj alokujc pami na stercie, zapisujc w niej
dane i nastpnie ulegajc awarii. Kod ródowy tej aplikacji znajduje si na
listingu 8.1.
Listing 8.1.
Prosty przykład aplikacji, która ulega awarii
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Advanced.NET.Debugging.Chapter8
{
class SimpleExc
{
418
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
static void Main(string[] args)
{
SimpleExc s = new SimpleExc();
s.Run();
}
public void Run()
{
Console.WriteLine("Nacinij dowolny klawisz, aby rozpocz");
Console.ReadKey();
ProcessData(null);
}
public void ProcessData(string data)
{
if (data == null)
{
throw new ArgumentException("Argument NULL");
}
string s = "Witaj: " + data;
}
}
}
Kod ródowy i plik binarny powyszego programu znajduj si w nast-
pujcych lokalizacjach:
Kod ródowy: C:\ADND\Chapter8\SimpleExc
Plik binarny: C:\ADNDBin\08SimpleExc.exe
Powód awarii tej aplikacji powinien by do oczywisty. Wywoanie funk-
cji
ProcessData
powoduje zgoszenie wyjtku
ArgumentException
,
poniewa zostaa jej przekazana warto
null
. Na pocztek wygenerujemy
zrzut za pomoc debugera.
Generowanie zrzutów przy użyciu debugera
Uruchom aplikacj, której kod ródowy znajduje si na listingu 8.1, i po-
zwól jej dziaa do wystpienia wyjtku.
…
…
…
ModLoad: 77bb0000 77bb6000 C:\Windows\system32\NSI.dll
ModLoad: 79060000 790b6000 C:\Windows\Microsoft.NET\Framework\v2.0.50727
\mscorjit.dll
(1860.958): CLR exception - code e0434f4d (first chance)
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
419
(1860.958): CLR exception - code e0434f4d (!!! second chance !!!)
eax=0020eaec ebx=e0434f4d ecx=00000001 edx=00000000 esi=0020eb74 edi=00416bd0
eip=767142eb esp=0020eaec ebp=0020eb3c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
KERNEL32!RaiseException+0x58:
767142eb c9 leave
0:000> .
.loadby sos mscorwks
0:000> !
!ClrStack
OS Thread Id: 0x958 (0)
ESP EIP
0020ebc4 767142eb [HelperMethodFrame: 0020ebc4]
0020ec68 00e10177 Advanced.NET.Debugging.Chapter8.SimpleExc.ProcessData
(System.String)
0020ec80 00e1010c Advanced.NET.Debugging.Chapter8.SimpleExc.Run()
0020ec88 00e100a7 Advanced.NET.Debugging.Chapter8.SimpleExc.Main
(System.String[])
0020eeac 79e7c74b [GCFrame: 0020eeac]
W tym momencie wygenerujemy zrzut do przeanalizowania w trybie
poawaryjnym. Najwaniejsz kwesti do rozwizania w przypadku genero-
wania zrzutu jest podjcie decyzji, ile informacji zapisa. Ogólna zasada jest
taka, e im wicej danych znajduje si w pliku obrazu, tym wicej informacji
bdziemy mieli do wykorzystania w pracy. Najwaniejszym czynnikiem
ograniczajcym jest oczywicie rozmiar pliku zrzutu. W niektórych przy-
padkach, np. na serwerach o ostrych zasadach bezpieczestwa, utworzenie
gigantycznego zrzutu jest niemoliwe i trzeba zadowoli si okrojon iloci
informacji.
Do utworzenia pliku obrazu suy polecenie
.dump
. Opcja
/m
tego po-
lecenia oznacza, e ma zosta utworzony zrzut minimalny. Opis wszyst-
kich opcji tego polecenia znajduje si w tabeli 8.2.
Oprócz opcji sterujcych wykonywaniem zrzutu naley poda jeszcze
nazw pliku, w którym zrzut zostanie zapisany. Jeli nie zostanie okrelona
pena cieka katalogu, w którym ma zosta zapisany ten plik, zostanie on
zapisany w katalogu uruchomieniowym debugera. Poniej znajduje si przy-
kadowe polecenie wykonujce peny zrzut pamici i zapisujce plik w wy-
branym katalogu.
.dump /mf c:\08dumpfile.dmp
Uruchomimy polecenie
.dump
na naszej uszkodzonej aplikacji:
0:000> .
.dump /mf 08dumpfile.dmp
Creating dumpfile.dmp - mini user dump
Dump successfully written
420
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Tabela 8.2.
Opcje polecenia .dump
Opcja
Opis
a
Generuje kompletny zrzut minimalny z wczonymi wszystkimi opcjami. Zrzut
taki zawiera pene dane dotyczce pamici, uchwytów, moduu, podstawowe
dane o pamici oraz informacje na temat wtku. Równoznaczne z
/mfFhut
f
Generuje zrzut minimalny zawierajcy wszystkie dostpne i zastrzeone
strony procesu
F
Generuje zrzut minimalny zawierajcy podstawowe informacje o pamici potrzebne
debugerowi do odtworzenia caej przestrzeni adresowej pamici wirtualnej
h
Generuje zrzut minimalny zawierajcy informacje o uchwytach
u
Generuje zrzut minimalny zawierajcy informacje o niezaadowanych moduach.
Opcja dostpna tylko w systemie Windows Server 2003
t
Generuje zrzut minimalny zawierajcy informacje czasowe dotyczce wtków.
Informacje te to m.in. czas utworzenia oraz czas pracy w trybach uytkownika
i jdra
i
Generuje zrzut minimalny zawierajcy informacje o pamici pomocniczej.
Pami pomocnicza to pami (oraz niewielki obszar j otaczajcy) wskazywana
przez wska nik stosu lub pami rezerwow
p
Generuje zrzut minimalny zawierajcy bloki rodowisk procesu i wtku
w
Generuje zrzut minimalny zawierajcy wszystkie zastrzeone prywatne strony
do zapisu i odczytu
d
Generuje zrzut minimalny zawierajcy wszystkie segmenty danych obrazu
c
Generuje zrzut minimalny zawierajcy segmenty kodu obrazu
r
Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotyczcych prywatnoci. Opcja ta czyci (zastpuje zerami) wszystkie informacje
niepotrzebne do odtworzenia stosu (wcznie ze zmiennymi lokalnymi)
R
Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotyczcych prywatnoci. Ta opcja usuwa pene cieki moduów, uniemoliwiajc
w ten sposób odtworzenie struktury katalogów
Wygenerowany plik zrzutu powinien mie rozmiar okoo 64 MB. Plik ten
naley zaadowa w innej instancji debugera przy uyciu przecznika
-z
.
Aby zaadowa wygenerowany przez nas plik, naley napisa nastpujce
polecenie:
c:\>ntsd –z 08dumpfile.dmp
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
421
Po wczytaniu pliku debuger wywietli nastpujce dane:
…
…
…
Loading Dump File [c:\08dumpfile.dmp]
User Mini Dump File with Full Memory: Only application data is available
Executable search path is:
Windows Server 2008 Version 6001 (Service Pack 1) MP (2 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS
Debug session time: Mon Mar 2 06:25:10.000 2009 (GMT-8)
System Uptime: 5 days 7:44:57.406
Process Uptime: 0 days 0:02:39.000
...........................
*** ERROR: Symbol file could not be found. Defaulted to export symbols for
ntdll.dll -
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(1860.958): CLR exception - code e0434f4d (first/second chance not available)
eax=0020eaec ebx=e0434f4d ecx=00000001 edx=00000000 esi=0020eb74 edi=00416bd0
eip=767142eb esp=0020eaec ebp=0020eb3c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
kernel32!RaiseException+0x58:
767142eb c9 leave
W górnej czci powyszych danych znajduj si podstawowe informacje
na temat wczytanego pliku zrzutu. Wród nich jest lokalizacja pliku, jego typ
oraz opis dostpnych danych. Kolejny interesujcy nas fragment znajduje si
bliej koca. Jest to opis powodu wystpienia awarii (wyjtek CLR). Majc
ten plik, mona zdiagnozowa problem na dowolnym komputerze — bez
dostpu do urzdzenia, na którym wystpia awaria. Szczegóowy opis tech-
nik wykonywania analizy poawaryjnej znajduje si nieco dalej.
Jedn z wad techniki wykonywania zrzutów za pomoc debugera jest ko-
nieczno podczenia go do ulegajcego awarii procesu. Moe si wydawa,
e to niewielki problem, ale wyobra sobie, e bd wystpuje tylko raz na
jaki czas i nie udao si trafi z podczeniem debugera wanie w tym
czasie. Dobrze by byo, gdybymy mieli moliwo nakazania systemowi
Windows wykonania zrzutu, gdy wystpi awaria procesu. Taka moliwo
jest i technik t potocznie nazywa si nastawieniem debugera poawaryjne-
go. Domylnym programem tego typu uywanym przez system Windows
jest Dr Watson (wycofywany w Windows Vista i nowszych wersjach sys-
temu na rzecz nowszej technologii). Dr Watson generuje plik zrzutu, gdy
nastpi awaria procesu, i umoliwia wysanie tego pliku do firmy Microsoft
do analizy. Wykorzystywany debuger poawaryjny mona jednak zmieni
przy uyciu polece wiersza polece przedstawionych w tabeli 8.3.
422
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Tabela 8.3.
Ustawienia debugera poawaryjnego
Polecenie
Wartość rejestru
Aedebug\Debugger
Opis
WinDbg –I
winDbg.exe -p %ld –e %ld -g
Ustawia WinDbg jako debuger
poawaryjny. Naley pamita,
e litera
-I
musi by wielka.
cdb –iae
cdb.exe -p %ld -e %ld –g
Ustawia cdb jako debuger
poawaryjny.
ntsd –iae
ntsd.exe –p %ld -e %ld –g
Ustawia ntsd jako debuger
poawaryjny.
drwtsn32 –i
drwtsn32 -p %ld -e %ld –g
Ustawia program Dr Watson
jako debuger poawaryjny.
Generowanie pliku zrzutu
W systemie Windows Vista wprowadzono ważną zmianę w stosunku do starszych
wersji tego systemu, dotyczącą sposobu zapisywania plików zrzutu w lokalnej
pamięci przez technologię raportowania błędów. W starszych wersjach systemu
Windows wygenerowane pliki były domyślnie zapisywane w komputerze przez
program Dr Watson. Dostęp do tych plików miał każdy, kto chciał przeprowadzić
diagnozę określonego pliku. W systemie Windows Vista Dr Watson przeszedł na
emeryturę, a jego miejsce zajął bardziej niezawodny mechanizm raportowania
błędów. Ten nowy system przy domyślnych ustawieniach nie zapisuje plików
zrzutu w pamięci lokalnej. Aby zmienić to domyślne ustawienie, należy ustawić
wartość rejestru
ForceQueue
na
1
. Powoduje to kolejkowanie wszystkich plików
zrzutu w pamięci lokalnej przed ich wysłaniem do firmy Microsoft. Ścieżka w reje-
strze do tej wartości jest następująca:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
Po ustawieniu wartości ForceQueue na 1 wszystkie pliki zrzutu będą zapisy-
wane w następującej lokalizacji:
Procesy działające w kontekście systemowym i podniesionym:
%ALLUSERSPROFILE %\Microsoft\Windows\WER\[ReportQueue|ReportArchive]
Pozostałe procesy:
%LOCALAPPDATA%\Microsoft\Windows\WER\[ReportQueue|ReportArchive]
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
423
Co tak naprawd dzieje si w czasie wykonywania polece z tabeli 8.3?
Nic wielkiego. Polecenia te zmieniaj tylko wartoci niektórych kluczy reje-
stru, które s sprawdzane przez system Windows przy wykrywaniu awarii
procesów. Poniej znajduje si cieka rejestru wykorzystywana do nasta-
wiania debugera poawaryjnego:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug
Klucz
Aedebug
dziaa znakomicie w przypadku diagnozowania aplikacji
rodzimych. Natomiast do sterowania procesem diagnozowania poawaryjnego
aplikacji zarzdzanych su dwie inne wartoci —
DbgManagedDebugger
i
DbgJITDebugLaunchSetting
. Znajduj si one w nastpujcym kluczu:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
Wartość DbgManagedDebugger
Jeli debugowanie poawaryjne zostanie wczone poprzez warto
DbgJIT
´DebugLaunchSettings
, warto rejestru
DbgManagedDebugger
okrela,
który debuger ma zosta uruchomiony w przypadku wystpienia nieobsu-
onego wyjtku. Aby np. domylnym debugerem uruchamianym w przy-
padkach wystpienia nieobsuonych wyjtków by ntsd, warto rejestru
DbgManagedDebugger
naley ustawi nastpujco:
c:\program files\debugging tools for windows (x86)\ntsd.exe -p %ld
Debuger okrelony w wartoci
DbgManagedDebugger
nie musi zosta
uruchomiony natychmiast po wystpieniu nieobsuonego wyjtku. Zamiast
tego zostanie wywietlone okno dialogowe, w którym mona wybra uru-
chomienie debugera lub zamknicie aplikacji.
Jedno z najczciej zadawanych pyta na temat debugowania poawa-
ryjnego brzmi: jak wymusi automatyczne generowanie zrzutu w odpowie-
dzi na wystpienie awarii? Aby to zrobi, naley ustawi warto rejestru
DbgManagedDebugger
w nastpujcy sposób:
ntsd –pv –p %ld –c ".dump /u /ma <cieka do pliku zrzutu>; .kill; qd
Powysze ustawienie oznacza, e jeli wystpi awaria, ma zosta wczony
debuger ntsd oraz uruchomione polecenie wykonania zrzutu. Nastpnie sesja
ma zosta zamknita poprzez odczenie debugera.
Do precyzyjnego okrelania dziaa w przypadku wystpienia nieob-
suonego wyjtku suy warto rejestru
DbgJITDebugLaunchSetting
opisana w nastpnym podrozdziale.
424
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Wartość DbgJITDebugLaunchSetting
Warto rejestru
DbgJITDebugLaunchSetting
suy do okrelania dziaa
w przypadku wystpienia nieobsuonego wyjtku. Jeli warto ta zostanie
ustawiona na
0
, w przypadku awarii bdzie wywietlane okno dialogowe,
w którym uytkownik bdzie móg zdecydowa, co robi. Naley pamita,
e okno to jest wywietlane tylko dla procesów interaktywnych (np. usug),
pozostae procesy bd po prostu zamykane. Przykadowe okno dialogowe
przedstawiono na rysunku 8.1.
Rysunek 8.1.
Przykładowe okno dialogowe wyświetlone po awarii aplikacji zarządzanej
Powysze okno poawaryjne informuje o wystpieniu problemu w pro-
gramie o nazwie 08SimpleExc.exe. Uytkownik moe si w nim zdecydowa
na debugowanie programu (przycisk Debuguj) lub jego zamknicie (przycisk
Zamknij program). Jeli zostanie nacinity przycisk Debuguj, system
sprawdzi ustawienie wartoci
DbgJITDebugLaunchSetting
i uruchomi
wyznaczony w niej debuger.
Jeli warto
DbgJITDebugLaunchSetting
zostanie ustawiona na
1
,
aplikacja, która ulega awarii, zostanie zamknita i zostanie zwrócony zrzut
stosu wywoa.
Jeli warto ta bdzie ustawiona na
2
, zostanie uruchomiony debuger
okrelony w wartoci
DbgManagedDebugger
bez wywietlania adnych
okien dialogowych.
Natomiast ustawienie wartoci
DbgJITDebugLaunchSetting
na
16
spowoduje wywietlanie dla procesów interaktywnych okna opisanego
powyej, a dla pozostaych procesów — uruchomienie debugera okrelonego
w wartoci
DbgManagedDebugger
.
Mimo i funkcje debugerów s wystarczajce do wygenerowania od-
powiedniego pliku zrzutu, dostpne jest jeszcze jedno narzdzie, które suy
do generowania tych plików — ma ono nazw ADPlus.
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
425
Generowanie plików zrzutu
za pomocą narzędzia ADPlus
ADPlus to narzdzie do monitorowania awarii procesów i automatyzowania
generowania plików zrzutu z moliwoci powiadamiania uytkownika lub
komputera o zaistniaej sytuacji. ADPlus to skrypt sterowany z wiersza po-
lece. Firma Microsoft zaleca uruchamianie go przy uyciu interpretera
cscript.exe. Oprócz opcji wiersza polece ADPlus mona równie konfigu-
rowa za pomoc plików konfiguracyjnych, które umoliwiaj bardziej pre-
cyzyjne sterowanie dziaaniem programu.
ADPlus moe dziaa w jednym z dwóch trybów:
Tryb zawiesze — suy do diagnozowania procesów wykazuj-
cych oznaki zawieszenia (np. nie robi adnego postpu albo wy-
korzystuj 100% mocy procesora). Aby monitorowa zawieszone
procesy, ADPlus musi zosta uruchomiony po ich zawieszeniu.
Tryb awaryjny — suy do diagnozowania procesów wykazujcych
oznaki wystpienia awarii. ADPlus musi zosta uruchomiony przed
procesem, w którym nastpia awaria.
Generowanie plików zrzutu za pomoc narzdzia ADPlus zilustruj na
przykadzie awarii programu 08SimpleExc.exe (tryb awaryjny). Uruchom
program SimpleExc.exe:
C:\ADNDBin\08SimpleExc.exe
Przed naciniciem klawisza w celu kontynuowania dziaania aplikacji
wpisz nastpujce polecenie:
C:\>adplus.vbs -crash -pn 08SimpleExc.exe -y
SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols
Przecznik
-crash
przestawia narzdzie ADPlus na tryb awaryjny,
-pn
suy do okrelania nazwy procesu, który ma by monitorowany, a
-y
— do
ustawiania cieki symboli, która ma by wykorzystywana podczas dziaania
ADPlus. Wielk zalet przecznika
-pn
jest moliwo monitorowania do-
wolnej liczby instancji dowolnego procesu.
Po zakoczeniu dziaania programu ADPlus zapisuje wynik swojego
dziaania w pliku w katalogu instalacyjnym debugerów systemu Windows.
Nazwa tego katalogu ma nastpujc struktur:
<runtype>_Mode__Date_<data uruchomienia>__Time_<czas dziaania>
426
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Np. w tym przypadku po zakoczeniu dziaania ADPlus utworzy nast-
pujcy katalog:
c:\Program Files\Debugging Tools for Windows (x86)\
´Crash_Mode__Date_03-02-2009__Time_08-31-43AM
Domyln ciek mona zmieni za pomoc przecznika
-o
.
W powyszym katalogu zostao zapisanych kilka plików, ale najwaniej-
sze z nich maj rozszerzenie .dmp, poniewa zawieraj wszystkie informacje
zrzutowe. Jak wida, w katalogu znajduje si kilka plików zrzutu. Dlaczego
jest wicej ni jeden plik dla jednej awarii? Program ADPlus automatyzuje
proces gromadzenia plików zrzutu i dlatego generuje kolejne pliki w przy-
padku wystpienia z góry okrelonych sytuacji. Powód wygenerowania
kadego pliku mona odczyta z jego nazwy. W naszym przykadzie pro-
gram ADPlus wygenerowa nastpujce pliki zrzutu:
PID-4448__08SIMPLEEXC.EXE__1st_chance_Process_Shut_
Down__full_1e20_2009-03-02_08-32-17-440_1160.dmp
PID-4448__08SIMPLEEXC.EXE__2nd_chance_NET_CLR__full_
1e20_2009-03-02_08-32-08-384_1160.dmp
ADPlus wygenerowa peny plik zrzutu po wystpieniu pierwszego zda-
rzenia zamknicia procesu. Nastpnie wygenerowa kolejny peny zrzut po
wystpieniu wyjtku .NET. Czy potrzebne nam s te wszystkie pliki w na-
szej sytuacji? Nie. Dla nas najbardziej interesujcy jest drugi plik — wyge-
nerowany po wystpieniu wyjtku .NET. Oczywicie w niektórych sytu-
acjach takie okresowe generowanie plików zrzutu jest bardzo pomocne,
poniewa mona odtworzy przebieg systematycznego psucia si procesu.
ADPlus umoliwia równie ustawianie czstotliwoci zapisywania informacji
oraz warunków, w jakich ma to by robione, co w istocie oznacza, e pozwala
na sterowanie dziaaniem debugera za pomoc skryptów. Szczegóowe in-
formacje na temat pisania skryptów w ADPlus znajduj si w dokumentacji
programu. Naley jednak koniecznie pamita, e ADPlus nie wykonuje za
pomoc swoich skryptów adnych czarodziejskich sztuczek. Jest to tylko
wygodny sposób na wprowadzanie dyrektyw debugera, które s nastpnie
tumaczone na zwyke zautomatyzowane polecenia. Aby zobaczy, jak ta
wygodna konfiguracja przekada si na polecenia debugera, mona zajrze
do folderu CDBScripts znajdujcego si w tym samym katalogu co pliki
zrzutu. W naszym przykadzie w folderze tym znajduje si plik o nazwie
PID-4448__08SimpleExc.exe.cfg zawierajcy wszystkie polecenia debugera
uyte w sesji diagnostycznej.
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
427
Ostatni wan rzecz, któr trzeba wiedzie na temat programu AD-
Plus, jest sposób okrelania typu pliku zrzutu generowanego w odpowiedzi
na wystpienie awarii. Su do tego cztery przeczniki wiersza polece:
-FullOnFirst
— generuje peny zrzut przy pierwszym wystpieniu
wyjtku.
-MiniOnSecond
— generuje zrzut minimalny przy drugim wyst-
pieniu wyjtku.
-NoDumpOnFirst
— blokuje generowanie zrzutu minimalnego przy
pierwszym wystpieniu wyjtku. Opcja ta jest przydatna w przypadku
aplikacji, które dobrze obsuguj pierwsze wystpienie wyjtku.
-NoDumpOnSecond
— blokuje generowanie zrzutu minimalnego
przy drugim wystpieniu wyjtku.
ADPlus to wygodne, elastyczne i bardzo pomocne narzdzie do monito-
rowania procesów i gromadzenia informacji o wystpujcych w nich awa-
riach. W tym podrozdziale zostay opisane podstawowe wiadomoci o tym
programie. Warto jednak powici troch czasu na zapoznanie si z innymi
jego moliwociami, jak np. skrypty i techniki definiowania niestandardo-
wych procedur obsugi wyjtków, które umoliwiaj generowanie zrzutów
w odpowiedzi na wystpienie niestandardowych wyjtków.
Znajc dwa najczciej stosowane sposoby tworzenia plików zrzutu, mo-
emy przystpi do ich praktycznego wykorzystania i zapozna si z pro-
cesem rozwizywania problemów przy ich uyciu.
Diagnozowanie plików zrzutu
Mamy ju pliki zrzutu i powierzono nam zadanie znalezienia przyczyny
problemów z procesem. Co konkretnie moemy zrobi z dostarczonymi nam
plikami? Czy moemy wykona z nich zrzut pamici, obejrze uchwyty albo
wykona kod krok po kroku? Przypominam, e plik zrzutu jest tylko statycz-
nym obrazem stanu procesu w okrelonym momencie. Dlatego ustawianie
punktów wstrzymania i wykonywanie kodu krok po kroku jest niemoliwe.
Korzystanie z plików zrzutu najatwiej porówna z rcznym debugowa-
niem. Mam na myli to, e moemy tylko oglda stan aplikacji i na tej
podstawie musimy opracowa teori na temat tego, jaki kod doprowadzi
do zaistniaej sytuacji. Nietrudno si domyli, e odtwarzanie sekwencji
wykonywania kodu na podstawie statycznej analizy jest znacznie trudniejsze
ni analizowanie programu w czasie dziaania. Niemniej jednak w statycz-
nym trybie nadal mona korzysta z wielu polece, które przetwarzaj dane
428
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
na bardziej zrozumia posta, i w wikszoci przypadków, jeli tylko
okae si wystarczajco duo cierpliwoci, udaje si odnale przyczyn
problemów.
Przed przejciem do analizowania wygenerowanych plików zrzutu mu-
simy pozna dwa bardzo wane pojcia — pliki symboli i warstwa dostpu
do danych. Poniewa pliki zrzutu nie zawieraj symboli, symbole te musz
by dostpne z jakiego innego róda w czasie sesji diagnostycznej. We
wczeniejszych czciach tej ksiki poznalimy najwaniejsze polecenia
zwizane z symbolami. Drug wan rzecz jest tzw. warstwa dostpu do
danych CLR (ang. data access layer — DAC), z której bardzo czsto korzysta
rozszerzenie SOS debugera w celu dostarczenia wszystkich potrzebnych
w sesji informacji.
Warstwa dostępu do danych
Podczas diagnozowania aplikacji rodzimych wiele informacji mona zdoby
poprzez przegldanie surowej pamici. Natomiast w kodzie zarzdzanym
rozszerzenie SOS zwracane przez siebie dane tworzy na podstawie informacji
uzyskanych w duym stopniu od CLR. Rozszerzenie to, odbierajc surowe
dane, musi je poprawnie przetworzy, korzystajc z pomocy w postaci wy-
woa do CLR (tzn. wykonywania kodu CLR). Za zwizane z tym funkcje
w CLR odpowiada modu o nazwie warstwa dostpu do danych (DAC), któ-
rego implementacja znajduje si w pliku mscordacwks.dll. Poniewa system
CLR jest cay czas ulepszany, jego warstwa DAC równie zmienia si z kad
wersj (wcznie z poprawkami). Mona to atwo sprawdzi, zagldajc do
folderu instalacyjnego kadej wersji .NET zainstalowanej w komputerze.
Np. w moim komputerze plik mscordacwks.dll znajduje si w nastpujcym
folderze:
c:\Windows\Microsoft.NET\Framework\v2.0.50727
Natomiast w komputerach z zainstalowanym programem Visual Studio
2010 CTP plik ten znajduje si w nastpujcych dwóch folderach (co ozna-
cza, e z CLR 4.0 zosta dostarczony nowy plik mscordacwks.dll):
c:\Windows\Microsoft.NET\Framework\v2.0.50727
c:\Windows\Microsoft.NET\Framework\v4.0.11001
Znajomo lokalizacji tego pliku jest niezbdna, poniewa debuger za-
da podania mu tej informacji. W czasie debugowania na ywo ten problem
nie wystpuje, poniewa rozszerzenie SOS znajduje ten plik, szukajc go
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
429
w tym samym katalogu, w którym znajduje si wersja rodowiska wyko-
nawczego, w jakim jest przeprowadzana sesja diagnostyczna. Natomiast
w czasie debugowania poawaryjnego wersja CLR uyta w aplikacji moe
by inna ni wersja dostpna na komputerze, na którym jest wczytywany
i diagnozowany plik zrzutu. Przypominam zatem, e rozszerzenie SOS
debugera odwouje si do pliku mscordacwks.dll, który wykonuje kod CLR,
oraz e zaadowanie odpowiedniej wersji tego pliku ma kluczowe znacze-
nie. Poniewa posiadanie odpowiedniej wersji tego pliku jest tak wane,
firma Microsoft udostpnia wszystkie istniejce jego wersje na swoim ser-
werze symboli publicznych. Jeli debuger zostanie skierowany do tego ser-
wera (za pomoc polecenia
symfix
lub innego podobnego), sam znajdzie
potrzebny mu plik. Zdarzaj si jednak sytuacje, w których trzeba wasno-
rcznie okreli lokalizacj tego pliku. Moe si to np. zdarzy, gdy okre-
lonej wersji pliku nie ma na serwerze symboli (rzadko) lub gdy plik ten nie
zosta zapisany w tym samym miejscu, w którym znajdowa si na kompute-
rze, na którym zosta wykonany zrzut. W takich sytuacjach naley skorzysta
z polecenia
cordll
sucego do okrelania sposobu adowania pliku
mscordacwks.dll. Polecenie to jest bezcenne, gdy wystpi problemy z do-
pasowaniem wersji tego pliku. W tabeli 8.4 znajduje si opis przeczników
polecenia
cordll
.
Skd wiadomo, czy naley si zainteresowa poleceniem
cordll
? Za-
zwyczaj jeli wystpi niezgodno wersji pliku mscordacwks.dll, rozsze-
rzenie SOS zwraca nastpujc informacj o bdzie (lub co podobnego),
gdy nie moe wykona jakiego polecenia:
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
2) the file mscordacwks.dll that matches your version of mscorwks.dll is
in the version directory
3) or, if you are debugging a dump file, verify that the file
mscordacwks___.dll is on your symbol path.
4) you are debugging on the same architecture as the dump file.
For example, an IA64 dump file must be debugged on an IA64
machine.
You can also run the debugger command .cordll to control the debugger’s
load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.
If you are debugging a minidump, you need to make sure that your
executable path is pointing to mscorwks.dll as well.
Przyjrzymy si wszystkim propozycjom zgoszonym powyej przez de-
buger. Pierwsza z nich jest prosta, poniewa debuger prosi nas, abymy si
upewnili, czy korzystamy z najnowszej wersji debugerów (6.2.14 lub nowszej).
430
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Tabela 8.4.
Przełączniki polecenia cordll
Przełącznik
Opis
-l
aduje moduy debugujce, szukajc pliku DLL na domylnych ciekach
-u
Usuwa moduy debugujce z pamici
-e
Wcza debugowanie CLR
-d
Wycza debugowanie CLR
-D
Wycza debugowanie CLR i usuwa moduy debugujce
-N
Ponownie aduje moduy debugujce
-lp
Okrela ciek do katalogu zawierajcego moduy debugujce
-Se
Umoliwia uywanie wersji o krótkiej nazwie moduu debugujcego
— mscordacwks.dll
-sd
Wycza moliwo uywania wersji o krótkiej nazwie moduu
debugujcego — mscordacwks.dll. Jeli ten przecznik zostanie uyty,
debuger spodziewa si, e nazwa moduu debugujcego bdzie miaa
nastpujcy format: mscordacwks_<spec>.dll, gdzie <spec> to
<architektura>_<architektura>_<wersja pliku>
-ve
Wcza tryb wzbogacony. Tryb ten jest przydatny przy pracy
z nieprawidowymi dopasowaniami, poniewa dostarcza informacji
na temat tego, jak debuger próbuje zaadowa moduy debugujce
-vd
Wycza tryb wzbogacony
Druga podpowied jest równie prosta. Debuger podpowiada nam, abymy
si upewnili, e nasza wersja pliku mscordacwks.dll jest taka sama jak wersja,
która jest adowana. Jak pamitamy, plik mscordacwks.dll powinien znaj-
dowa si w tym samym folderze co plik mscorwks.dll. Trzecia sugestia
jest najciekawsza ze wszystkich. W tym przypadku debuger informuje, e
jeli jest wykonywane diagnozowanie pliku zrzutu, naley sprawdzi, czy
plik mscordacwks__.dll znajduje si na ciece symboli. Co to za plik?
W tabeli 8.4 znajduje si polecenie
-sd
wczajce dug nazw pliku
mscordacwks.dll. Duga nazwa to nazwa z dodan informacj o architektu-
rze i numerem kompilacji pliku DLL. Dziki tym informacjom mona
zmodyfikowa ciek symboli, aby wskazywaa waciwy plik DLL, oraz
ponownie wykona polecenie
cordll
, aby ponownie zaadowa plik
mscordacwks.dll. Jeli np. do wykonania pliku zrzutu wykorzystano wersj
1.1.1.0 pliku mscordacwks.dll oraz dokonano tego w komputerze x86, mona
P
L I K I O B R A Z U
—
P O D S T A W O W E W I A D O M O C I
431
nazw pliku mscordacwks.dll zmieni na mscordacwks_x86_x86_1.1.1.0.dll,
ustawi ciek symboli debugerów na jego lokalizacj i ponownie zaa-
dowa moduy debugujce za pomoc polecenia
cordll
.
0:008> .
.sympath+ <path to renamed module>
0:008> .
.cordll -ve -u -l
Czwarta sugestia dotyczy upewnienia si, e architektura komputera, na
którym przeprowadzana jest diagnostyka, zgadza si z architektur kompu-
tera, na którym zosta wykonany zrzut. Poniewa debuger wykonuje swoj
prac poprzez wykonywanie kodu w DAC, zalecane jest, aby debugowa
pliki zrzutu w architekturze o takiej samej liczbie bitów jak ta, w której
utworzono plik. Jeli np. uyto by 64-bitowego debugera do wygenerowania
pliku zrzutu procesu 32-bitowego dziaajcego w systemie 64-bitowym przy
uyciu nakadki WOW64, nie udaoby si przeprowadzi diagnostyki tego
pliku.
W ostatnim wierszu powyszych danych znajduje si pytanie, czy na
ciece plików wykonywalnych znajduje si plik mscorwks.dll. Zawarto
cieki plików wykonywalnych mona zmieni w debugerze za pomoc
polecenia
exepath
(lub
exepath+
w przypadku dodawania cieek). Np.
w przypadku diagnozowania pliku zrzutu, przy wykonywaniu którego plik
mscorwks.dll znajdowa si w katalogu c:\windows\microsoft.net\framework\
v2.0.50727, mona zastosowa ponisze polecenie ustawiajce poprawnie
ciek plików wykonywalnych (nastpnie naley uy polecenia
.reload
,
aby nowa cieka zostaa wczytana przez debuger):
0:008> .
.exepath+ c:\windows\microsoft.net\framework\v2.0.50727
Executable image search path is: c:\windows\microsoft.net\framework\v2.0.50727
0:008> .
.reload
We wszystkich dotychczas opisanych sytuacjach przyjto zaoenie, e
plik mscordacwks.dll jest dostpny w jednym lub innym miejscu (na serwe-
rze symboli publicznych lub na komputerze lokalnym). Jeli nie mona
znale wersji pliku DLL, która zostaa uyta przy generowaniu pliku
zrzutu, najlepiej jest poprosi osob, która to zrobia, o przesanie odpo-
wiedniej wersji pliku mscordacwks.dll. Po otrzymaniu pliku mona go
zaadowa, stosujc techniki opisane powyej.
Okrelenie waciwej wersji pliku mscordacwks.dll bywa czasami trudne
i uzyskanie biegoci w jej znajdowaniu wymaga troch czasu i przeprowa-
dzenia kilku prób. Po zaadowaniu tego pliku rozszerzenie SOS bdzie
w peni funkcjonalne i bdzie mona ponowi diagnozowanie.
432
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Analizowanie plików zrzutu
— nieobsłużone wyjątki .NET
W poprzednim podrozdziale wygenerowalimy plik zrzutu awaryjnej apli-
kacji i naszym zadaniem jest znalezienie przyczyny problemów, majc do
dyspozycji tylko ten plik.
Aby móc wykorzysta ten plik, musimy o tym poinformowa debuger. Do
tego suy przecznik
-z
:
C:> ntsd –z C:\08dumpfile.dmp
Pierwsz wan informacj zwrócon przez debuger jest wyjtek CLR:
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(2dc4.2a08): CLR exception - code e0434f4d (first/second chance not available)
eax=0024ef20 ebx=e0434f4d ecx=00000001 edx=00000000 esi=0024efa8 edi=002c43e8
eip=767142eb esp=0024ef20 ebp=0024ef70 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
kernel32!RaiseException+0x58:
767142eb c9 leave
Z powyszych danych wynika, e badany przez nas plik zosta wygene-
rowany z powodu wystpienia wyjtku CLR. Kolejnym krokiem bdzie
dokadne przyjrzenie si temu wyjtkowi.
0:000> k
kb
ChildEBP RetAddr Args to Child
0024ef70 79f071ac e0434f4d 00000001 00000001 kernel32!RaiseException+0x58
0024efd0 79f0a629
01b66c20 00000000 00000000
mscorwks!RaiseTheExceptionInternalOnly+0x2a8
0024f094 01630197 01b658d0 0024f0e0 0024f0fc mscorwks!JIT_Throw+0xfc
WARNING: Frame IP not in any known module. Following frames may be wrong.
00000000 00000000 00000000 00000000 00000000 0x1630197
0:000> !
!pe 01b66c20
Exception object: 01b66c20
Exception type:
System.ArgumentException
Message:
Argument NULL
InnerException: <none>
StackTrace (generated):
SP IP Function
0024F09C 01630197
08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.ProcessData
(System.String)+0x57
0024F0B4 01630124
08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.Run()+0x34
0024F0C8 016300A7 08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.Main
(System.String[])+0x37
StackTraceString: <none>
HResult: 80070057
U
S U G A R A P O R T O W A N I A B D Ó W
433
Sdzc po tym wyjtku, moemy wywnioskowa, e aplikacja ulega
awarii z powodu nieprawidowej wartoci (
NULL
) argumentu przekazanego
w wywoaniu metody. Na podstawie dostarczonego zrzutu stosu wywoa
moemy przeprowadzi prosty przegld kodu, dziki czemu uda si znale
problem. Mimo i powyszy przykad jest bardzo prosty, stanowi on dowód,
e diagnozowanie aplikacji zarzdzanych po wystpieniu awarii jest jak naj-
bardziej moliwe. W procesie tym mona korzysta ze wszystkich bardzo
pomocnych polece rozszerze debugera SOS i SOSEX.
Usługa raportowania błędów
Kady uytkownik systemu Windows przynajmniej raz w yciu widzia okno
dialogowe widoczne na rysunku 8.2.
Rysunek 8.2.
Okno dialogowe programu Dr Watson
Okno to jest graficznym elementem technologii o nazwie Usuga rapor-
towania bdów (ang. Windows Error Reporting — WER). Mona si w nim
zdecydowa na wysanie raportu o bdzie firmie Microsoft. Jeli uytkownik
wyle taki raport, zostanie on przesany zabezpieczonym kanaem (HTTPS)
do bazy danych Microsoftu, w której zostanie przydzielony do odpowiedniej
kategorii i zapisany w celu pó niejszego przeanalizowania. Jak nietrudno si
domyli, w raporcie tym znajduje si równie plik zrzutu, na podstawie któ-
rego programici mog spróbowa znale przyczyn zaistniaego problemu.
Z Usugi raportowania bdów mog korzysta aplikacje rónych produ-
centów, nie tylko firmy Microsoft. Raportowaniu podlega kady proces sys-
temu Windows wywoujcy jak awari. Aby jednak uzyska dostp do ra-
portów zgaszanych przez nasze aplikacje, musimy najpierw zarejestrowa
si w Usudze raportowania bdów. W tym podrozdziale dowiesz si, jak
dziaa usuga WER, co jest w jej ramach wysyane, jak zarejestrowa si
w tej usudze oraz jak pobiera z niej raporty.
434
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Architektura usługi Windows Error Reporting
Windows Error Reporting to usuga gromadzenia danych dotyczcych awarii
umoliwiajca firmie Microsoft i innym producentom oprogramowania atwe
uzyskanie dostpu do informacji zwizanych z ich programami. Ogólny
schemat dziaania usugi WER zosta przedstawiony na rysunku 8.3.
Rysunek 8.3.
Schemat usługi WER
U
S U G A R A P O R T O W A N I A B D Ó W
435
Dwa najwaniejsze elementy powyszego schematu to:
Komputery, na których dziaaj aplikacje sprawiajce problemy i które
wysyaj raporty do WER.
Producent oprogramowania monitorujcy raporty na temat jego apli-
kacji przysyane do WER.
Wyobra my sobie, e gdzie na wiecie znajduje si komputer, na któ-
rym dziaa jaka aplikacja (proces X na rysunku 8.3) wyprodukowana przez
firm ADND. Program ten ulega awarii, co powoduje wywietlenie okna
dialogowego moduu Dr Watson, w którym uytkownik zgadza si na
wysanie raportu o bdzie poprzez bezpieczny kana HTTPS do usugi WER.
Usuga ta segreguje przychodzce raporty i zapisuje informacje o bdach
w odpowiednich kategoriach. Uytkownik z firmy ADND wysya zapytania
do bazy danych WER na temat aplikacji swojej firmy i w odpowiedzi uzy-
skuje informacje. Teraz firma ADND moe rozwiza zaistniay problem
i zdefiniowa odpowied , która zostanie przedstawiona uytkownikowi apli-
kacji przez modu Dr Watson przy nastpnej awarii. Reakcja ta moe by
przekazana w formie poprawki do programu lub jakiej pomocnej informacji.
Jak wida, usuga WER to bardzo pomocny system umoliwiajcy bez-
pieczne gromadzenie informacji o bdach i wykorzystanie ich przez pro-
ducentów oprogramowania do badania jakoci ich aplikacji. Ponadto
producenci mog publikowa odpowiedzi na poznane problemy i dodawa je
do systemu reagowania WER, dziki czemu klienci bez problemu uzy-
skuj poprawki, gdy s one dostpne.
Po co wysyłać informacje o błędach
Gdy Dr Watson obudzi się, aby poinformować Cię o wystąpieniu awarii, możesz się
zastanawiać, po co wysyłać te raporty. Czy ktoś coś z nimi robi? Prawda jest taka,
że firma Microsoft bardzo poważnie traktuje raporty o błędach. Dlatego właśnie
w ogóle powstał cały ten system raportowania. Dane z raportów są aktywnie
analizowane i rozsyłane po różnych działach, których dotyczą. Gdy źródło problemu
zostanie odkryte i programiści opracują łatkę, zostaje ona opublikowana (zwykle
poprzez usługę Microsoft Update) do zainstalowania na komputerach użytkowni-
ków. Innymi słowy, każdy użytkownik powinien wysyłać wszystkie raporty o błędach,
aby firma Microsoft lub inni producenci mogli przeanalizować problem i opracować
jego rozwiązanie.
436
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
W dalszej czci tego podrozdziau do zilustrowania procesu korzystania
z usugi WER bdzie wykorzystywana aplikacja 08SimpleExc.exe z wcze-
niejszego podrozdziau.
Pierwsz czynnoci, jak naley wykona, aby móc korzysta z usugi
WER, jest rejestracja w tej usudze.
Rejestrowanie się w usłudze WER
Aby sta si uytkownikiem usugi WER (tzn. móc pobiera z niej raporty),
naley si zarejestrowa. Proces rejestracji dzieli si na dwa etapy:
Utworzenie konta uytkownika.
Utworzenie konta firmowego.
Proces rejestracji mona rozpocz na poniszej stronie:
https://winqual.microsoft.com/SignUp/
Po wpisaniu powyszego adresu w oknie przegldarki zostanie wywie-
tlona strona widoczna na rysunku 8.4.
Rysunek 8.4.
Pierwsza strona procesu rejestracji w usłudze WER
Aby utworzy konto uytkownika, naley mie konto firmowe. Jeli masz
ju konto firmowe, moesz go poszuka lub wybra jego nazw z listy roz-
wijanej. Gdy ju wybierzesz swoje konto firmowe, kliknij przycisk Next, aby
przej do kolejnego etapu rejestracji. Poniewa nie utworzylimy jeszcze
konta firmowego, przechodzimy do sekcji Create a Company Account
(rysunek 8.5).
U
S U G A R A P O R T O W A N I A B D Ó W
437
Rysunek 8.5.
Tworzenie konta firmowego
Tworzenie konta firmowego skada si z trzech etapów:
1.
Utworzenie podpisanego pliku Winqual.exe. Kada firma, która chce
zaoy konto w usudze WER, musi dokona autoidentyfikacji. Do
tego celu jest wykorzystywany cyfrowy certyfikat podpisywania kodu
Class 3 lub certyfikat instytucji certyfikujcej, który mona kupi
w firmie VeriSign (www.verisign.com/code-signing/content-signing-
certificates/winqual-partners/index.html). Po otrzymaniu certyfikatu
naley nim podpisa plik Winqual.exe i wysa do firmy Microsoft do
weryfikacji.
2.
Dostarczenie informacji rozliczeniowych. Wikszo funkcji usugi
WER jest bezpatna, ale za niektóre nowe udoskonalenia trzeba za-
paci. Dlatego firma Microsoft wymaga podania informacji rozlicze-
niowych.
3.
Podanie informacji kontaktowych poprzez utworzenie konta uytkow-
nika, za pomoc którego mona uzyska dostp do konta firmowego.
438
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Zaczniemy od punktu 1 (podpisywania pliku Winqual.exe). Jak wspomi-
naem, firma Microsoft ze wzgldów bezpieczestwa wymaga, aby kada
firma rejestrujca si w usudze WER dokonaa autoidentyfikacji za pomoc
podpisu kodu ródowego Class 3 lub certyfikatu wydanego przez instytucj
certyfikujc. W dalszej czci tego rozdziau przyjem, e mamy ju certy-
fikat VeriSign. Najpierw musimy pobra plik do podpisania z serwera Micro-
softu pod nastpujcym adresem:
https://winqual.microsoft.com/signup/winqual.exe
Zapisz ten plik na dysku twardym w folderze C:\Sign. Teraz potrzebne
bd narzdzia do podpisywania kodu. Narzdzia te znajduj si pod na-
stpujcym adresem:
https://winqual.microsoft.com/signup/signcode.zip
Zapisz pobrany plik na dysku i wypakuj jego zawarto w folderze C:\Sign.
Po wypakowaniu powinny pojawi si dwa pliki:
readme.rtf — plik zawierajcy instrukcje podpisywania kodu pliku
binarnego za pomoc narzdzi do podpisywania kodu. Ponadto plik
ten zawiera haso, którego naley uy przy wypakowywaniu pliku
signcode.exe, równie znajdujcego si w tym archiwum ZIP.
signcode.exe — aplikacja, za pomoc której podpiszemy plik Wi-
nqual.exe.
Wypakuj plik signcode.exe (pamitaj o podaniu hasa z pliku readme.rtf)
w tym samym folderze, w którym znajduje si plik Winqual.exe (C:\Sign).
Ponadto skopiuj do tego folderu plik certyfikatu podpisywania kodu (z roz-
szerzeniem .spc) i klucz prywatny (z rozszerzeniem .pvk). Do podpisania
pliku Winqual.exe zastosuj nastpujce polecenie:
C:\Sign>signcode.exe /spc myCert.spc /v myKey.pvk –t
http://timestamp.verisign.com/scripts/timstamp.dll winqual.exe
Succeeded
Nazwy plików myCert.spc i myKey.pvk zastp nazwami wasnych plików
certyfikatu i klucza prywatnego. Podczas procesu podpisywania trzeba wpro-
wadzi haso klucza prywatnego. Podaj haso dostarczone przez VeriSign
podczas procesu nabywania certyfikatu. Jeli podpisywanie powiedzie si, zo-
stanie wywietlony stosowny komunikat. Jeli wystpi jakie bdy, sprawd ,
czy poprawnie zostay wpisane nazwy plików certyfikatu i klucza prywatne-
go oraz czy znajduj si one w tym samym folderze co plik signcode.exe.
U
S U G A R A P O R T O W A N I A B D Ó W
439
Nastpnym etapem procesu rejestracji jest wysanie podpisanego pliku
Winqual.exe do firmy Microsoft w celu weryfikacji. Na stronie widocznej na
rysunku 8.5 kliknij przycisk Next. Na nastpnej stronie (rysunek 8.6) znaj-
duje si formularz, za pomoc którego mona wysa plik do firmy Microsoft.
Rysunek 8.6.
Wysyłanie podpisanego pliku Winqual.exe
Aby wysa plik, naley wpisa w ciek do niego i klikn przycisk
Next. Po tym zostanie wywietlona kolejna strona, na której naley poda
informacje rozliczeniowe (rysunek 8.7).
Rysunek 8.7.
Strona informacji rozliczeniowych
440
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Jak wspominaem, wikszo funkcji usugi WER jest bezpatna, ale za
niektóre firma Microsoft pobiera opaty. Informacje rozliczeniowe zostan
wykorzystane, jeli uytkownik skorzysta z której z patnych funkcji.
Wprowad informacje rozliczeniowe swojej firmy (pola oznaczone dru-
kiem pogrubionym naley obowizkowo wypeni) i kliknij przycisk Next.
Przejdziesz do strony tworzenia profilu konta (rysunek 8.8).
Rysunek 8.8.
Strona tworzenia profilu konta
Dane wpisane w polach User Name i Password bd suyy pó niej do
logowania do konta w usudze. Wypenij wszystkie pola formularza, w szcze-
gólnoci zwró uwag na wymagania dotyczce hase opisane na dole strony.
Utworzenie silnego hasa jest konieczne, aby informacje dotyczce bdów
firm byy bezpieczne.
U
S U G A R A P O R T O W A N I A B D Ó W
441
Po wypenieniu formularza kliknij przycisk Next, aby przej do strony
z informacj o pomylnym zakoczeniu procesu tworzenia nowego konta
(rysunek 8.9).
Rysunek 8.9.
Pomyślne zakończenie procesu tworzenia nowego konta
Ostatnie czynnoci, jakie naley wykona przed uzyskaniem dostpu do
WER, to ustalenie praw dostpu i podpisanie umów. Zaczniemy od praw
dostpu. Kliknij cze Manage Permissions, aby przej na stron zarzdzania
prawami dostpu widoczn na rysunku 8.10.
Rysunek 8.10.
Zarządzanie prawami dostępu
442
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
W razie potrzeby zaznacz pola wyboru Sign Master Legal Agreements,
View WER Data oraz Download WER Data i kliknij przycisk Update. Warto
zauway, e z jednym kontem firmowym WER moe by powizanych
wiele kont uytkownika. Jest to przydatne, gdy potrzebne s konta o rónych
poziomach dostpu do danych (których okrelanie przedstawiono na rysunku
8.10). Np. jeden uytkownik moe mie dostp do raportów o bdach, a inny
moe mie moliwo podpisywania umów.
Teraz wrócimy do strony widocznej na rysunku 8.9, aby zakoczy pro-
ces poprzez podpisanie umowy, która jest wymagana przez firm Microsoft.
Kliknij cze Sign Legal Agreements, co spowoduje przejcie na stron umowy
dotyczcej korzystania z usugi Windows Error Reporting. Przeczytaj uwa-
nie wszystkie informacje i jeli akceptujesz warunki, wprowad informacje
na dole ostatniej strony, aby podpisa umow. Jeli chcesz zachowa dla
siebie kopi umowy, moesz wprowadzi w formularzu dane swojej firmy
i j wydrukowa.
Na tym koczy si proces rejestracji. Od tej pory moesz korzysta
z wszystkich funkcji usugi WER, logujc si do swojego konta pod adresem
https://winqual.microsoft.com/default.aspx.
Poruszanie się po witrynie usługi WER
Po zalogowaniu si w usudze WER na stronie wywietlane s najnowsze
wiadomoci dotyczce Winqual. Po lewej stronie znajduje si kolumna za-
wierajca cza do rónych czci witryny. Trzy najwaniejsze czci tej
kolumny to:
Windows Logo Programs.
Windows Error Reports.
Driver Distribution Center.
My zajmiemy si tylko sekcj Windows Error Reports, a mówic dokad-
niej, czci Software usugi WER. Opcje dostpne w menu Software przed-
stawiono na rysunku 8.11.
Opcja Product Rollups w kategorii Event Views suy do wywietlania
raportów o bdach, posegregowanych wedug nazwy i wersji produktu.
Taka przykadowa strona jest przedstawiona na rysunku 8.12.
Na powyszym rysunku wida, e zarejestrowano tylko jeden produkt
— Advanced .NET Debugging. Produkt ten ma dwie kolumny, dziki
którym mona uzyska bardziej szczegóowe informacje na temat zda-
rze (awarii i innych), które mogy zosta zgoszone:
U
S U G A R A P O R T O W A N I A B D Ó W
443
Rysunek 8.11.
Opcje menu Software usługi WER
Rysunek 8.12.
Przykładowa strona Product Rollup
Eventlist — kliknicie tej ikony powoduje przejcie na stron za-
wierajc list wszystkich zdarze, które miay miejsce w aplikacji.
Hotlist — kliknicie tej ikony powoduje przejcie na stron z infor-
macjami na temat najczstszych problemów w aplikacji z ostatnich
90 dni.
Kolejnym elementem menu jest kategoria Administration. Znajduj si
w niej nastpujce opcje:
Manage Mappings — umoliwia powizanie plików binarnych z pro-
duktami, dziki czemu usuga WER rozpoznaje, które pliki nale do
poszczególnych produktów. Sposób tworzenia takiego powizania
poka nieco pó niej.
444
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Manage Responses — umoliwia zdefiniowanie odpowiedzi na czsto
zgaszane przez uytkowników problemy. W istocie oznacza to utwo-
rzenie odpowiedzi zwrotnej, która moe zawiera wszystko: od zwy-
kych informacji po atki. Sposób definiowania odpowiedzi równie
poka nieco dalej.
Znamy ju ogólny rozkad witryny WER. Teraz przejdziemy do wizania
plików binarnych z produktami, aby poinformowa usug, które pliki nale
do poszczególnych produktów.
Wiązanie plików binarnych z produktami
Po zalogowaniu si na koncie naley tak ustawi konfiguracj, aby wszystkie
informacje o bdach naszych aplikacji byy przesyane na nasze firmowe
konto. Gdy do usugi WER dotrze raport o bdzie, musi ona przyporzd-
kowa go waciwej firmie. Najwaniejszym elementem tego procesu jest
nazwa aplikacji. Dlatego firmy rejestrujce si w usudze WER musz
poda w niej nazwy wszystkich swoich produktów (wcznie z wszystkimi
plikami binarnymi). Informacje te s nastpnie przekazywane do witryny
WER w odpowiednio sformatowanym pliku XML. Plików tych nie kompi-
luje si samodzielnie, tylko uywa si do tego narzdzia WER o nazwie
Microsoft Product Feedback Mapping Tool. Narzdzie to mona pobra pod
nastpujcym adresem:
www.microsoft.com/downloads/details.aspx?Family
´Id=4333E2A2-5EA6-4878-BBE5-60C3DBABC170&displaylang=en
Pobierzemy ten program i wypróbujemy go. Po jego zainstalowaniu
kliknij Start/Programy/Microsoft Product Feedback Mapping Tool. Zostanie
wywietlona pierwsza strona kreatora, który poprowadzi Ci przez proces
wizania (rysunek 8.13).
Proces tworzenia powizania plików w usudze WER zilustruj na
przykadzie znanej nam ju aplikacji 08SimpleExc.exe. Zaznacz pole wy-
boru Create a new mapping file i kliknij przycisk Next. Na rysunku 8.14
pokazano nastpn stron kreatora — o nazwie Gathering Product Mapping
Information.
Poniej znajduje si opis opcji dostpnych na tej stronie. Naley pamita,
aby przed przejciem dalej wprowadzi takie same informacje jak na rysunku.
Product file(s) directory path — okrela ciek do katalogu z plikami
binarnymi aplikacji.
U
S U G A R A P O R T O W A N I A B D Ó W
445
Rysunek 8.13.
Narzędzie Microsoft Product Feedback Mapping Tool
Rysunek 8.14.
Strona Gathering Product Mapping Information
Product Name — okrela nazw produktu, z którym maj zosta
zwizane pliki binarne. Nazwa ta powinna by atwa do rozpoznania
dla uytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.
446
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Product Version — okrela wersj produktu, z którym maj zosta
zwizane pliki binarne. Warto ta powinna by atwa do rozpozna-
nia dla uytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.
Po wprowadzeniu wszystkich informacji w tym i kolejnym oknie kliknij
przycisk Next. Nastpnie kreator zada podania nazwy pliku wizania, który
zostanie niebawem wygenerowany. Wprowad nastpujc ciek i kliknij
przycisk Next:
C:\testmap.xml
Ostatni etap procesu, polegajcy na wysaniu pliku wiza do witryny
WER, jest przedstawiony na rysunku 8.15.
Rysunek 8.15.
Wysyłanie pliku wiązań do usługi WER
Zaznacz znajdujce si na tej stronie kreatora pole wyboru i kliknij przy-
cisk Finish. Zostanie uruchomiona przegldarka internetowa z wywietlon
stron wysyania pliku (rysunek 8.16).
Na tej stronie wprowad ciek do utworzonego przed chwil pliku
wiza i kliknij przycisk Submit. Po pomylnym wysaniu pliku proces wiza-
nia plików z produktem jest zakoczony. Jeli masz wicej produktów, mu-
sisz powtórzy wszystkie opisane czynnoci dla kadego z nich osobno.
U
S U G A R A P O R T O W A N I A B D Ó W
447
Rysunek 8.16.
Strona wysyłania pliku wiązań
Wracamy do strony gównej usugi WER. Aby rozporzdza swoimi
powizaniami plików z produktami, naley po lewej stronie wybra opcj
Manage Mappings z menu Software. Mona zarówno wybra Product and
File Mappings, jak i wysa plik wiza. Np. efekt wybrania cza File Map-
ping po wysaniu pliku wiza przedstawia rysunek 8.17.
Rysunek 8.17.
Wiązania plików w usłudze WER
448
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Na powyszym rysunku wida, e mamy kilka wiza plików, z których
kade ma wasny zestaw atrybutów (np. data cza i powizania). Dodatkowo
wywietlone s informacje administracyjne, np. identyfikator i adres e-mail
osoby, która utworzya dane wizanie.
Majc wizania plików z produktem, moemy przej do funkcji WER
zwizanych z generowaniem raportów. Nauczymy si generowa raporty
z informacji otrzymanych od uytkowników oraz szczegóowo analizowa te
raporty (np. zrzuty awaryjne).
Wysyłanie zapytań do usługi WER
Mamy ju konto w usudze WER oraz powizalimy plik binarny 08Simple
Exc.exe z produktem. Czas zatem na zapoznanie si z mechanizmem pobie-
rania z WER informacji na temat zgoszonych bdów w aplikacji. Urucho-
mimy nasz program klika razy i nakaemy moduowi Dr Watson wysanie
do witryny WER informacji o awariach. Naley pamita, e od wysania
raportu do jego pojawienia si w WER musi upyn nieco czasu.
Gdy wysane raporty bd ju dostpne, na stronie Product Rollup zo-
stanie wywietlona tabela produktów, jak na rysunku 8.18.
Rysunek 8.18.
Strona Product Rollup z wyszczególnionymi błędami
Na rysunku 8.18 znajduje si nasz produkt (Advanced .NET Debugging) oraz
ogólna liczba zaraportowanych zdarze. Dodatkowo w kolumnach Eventlist
i Hotlist znajduj si ikony wywietlajce wszystkie zdarzenia, które wyst-
piy w konkretnym produkcie, oraz bdy, które powtarzay si najczciej
w cigu ostatnich 90 dni. Lista Hotlist jest znakomitym sposobem na ziden-
tyfikowanie najwaniejszych problemów z aplikacj. Na rysunku 8.19 znaj-
duje si przykadowa strona listy zdarze.
U
S U G A R A P O R T O W A N I A B D Ó W
449
Rysunek 8.19.
Lista zdarzeń produktu Advanced .NET Debugging
Na stronie tej znajduje si tabela, w której wierszach zapisane s in-
formacje o poszczególnych zdarzeniach. Na rysunku 8.19 wida, e zostao
zgoszone tylko jedno zdarzenie, ale za to dwukrotnie. W tabeli znajduje si
równie informacja o tym, jakiego rodzaju zdarzenie spowodowao wygene-
rowanie danego raportu. W naszym przypadku jest to typ CLR20 Managed
Crash. Oznacza to, e zdarzenie miao miejsce z powodu awarii w aplikacji
zarzdzanej wykorzystujcej CLR 2.0. Klikajc identyfikator zdarzenia, mona
wywietli szczegóowe informacje na jego temat. Strona szczegóów zda-
rzenia jest podzielona na trzy czci:
Event Signature — poniewa z kadym produktem moe by zwi-
zanych wiele zdarze, kade zdarzenie musi mie niepowtarzalny
identyfikator. Skadniki takiego identyfikatora, zapewniajce jego
niepowtarzalno, s nastpujce: nazwa i wersja aplikacji, nazwa
i wersja moduu, miejsce (przesunicie) w module, który spowodo-
wa wystpienie zdarzenia. Jak wida na rysunku 8.20, w module
08SimpleExc.exe awari wywoao miejsce o przesuniciu 4734.
Event Time Trending Details — wykres znajdujcy si w tej sekcji
przedstawia czasowy przebieg wystpowania zdarzenia. Na rysunku
8.20 wida, e nasze zdarzenie wystpio 16 marca, a pó niej czsto-
tliwo jego wystpowania malaa.
Platform Details — zawiera szczegóowe informacje dotyczce kon-
kretnego zdarzenia, np. system operacyjny i jzyk. Informacje z tej
sekcji s bezcenne przy identyfikowaniu problemów wystpujcych
tylko w okrelonych konfiguracjach i umoliwiaj wysnucie wnio-
sków, e np. problem zdarza si tylko w angielskich wersjach jzy-
kowych programu.
450
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Rysunek 8.20.
Szczegóły zdarzenia modułu 08SimpleExc.exe
Na rysunku 8.20 widoczne s tylko dane dotyczce aplikacji 08Simple
Exc.exe.
Strona szczegóów zdarze zawiera równie sekcj o nazwie Data Col-
lection, któr przedstawiono na rysunku 8.21.
Rysunek 8.21.
Sekcja gromadzenia danych
W sekcji Data Collection mona przej do listy dostpnych plików .cab
okrelonego zdarzenia poprzez kliknicie ikony Cab Status albo zmieni za-
sad gromadzenia danych dla wybranego zdarzenia, klikajc ikon Data
Request. Na rysunku 8.22 przedstawiono okno zasady gromadzenia danych.
U
S U G A R A P O R T O W A N I A B D Ó W
451
Rysunek 8.22.
Zasada gromadzenia danych
Pamitaj, gdy w aplikacji wystpi awaria, komputer, na którym to si stao,
czy si z usug WER w celu sprawdzenia ustawionej zasady gromadzenia
danych. Jeli zasada zostaa zmieniona i wymaga ponownego wysania, kom-
puter klienta tworzy nowy plik .cab zgodnie z zasad i wysya go do WER.
W oknie zasady gromadzenia danych mona okreli, jakie dodatkowe in-
formacje maj by zbierane w tym procesie. Oprócz informacji systemowych
mona pobra dane sterty oraz dodatkowe pliki okrelone za pomoc ze-
stawu predefiniowanych zmiennych rodowiskowych. Ponadto mona okre-
li liczb dodatkowych plików .cab, które maj zosta zebrane.
Ostatnia wana kolumna tabeli przedstawionej na rysunku 8.19 ma na-
zw Cabs. Kliknicie ikony powoduje wywietlenie listy dostpnych dla
zdarzenia plików .cab. Plik .cab to zbiór plików reprezentujcych informacje
o zdarzeniu (jeden plik .cab przypada na jedno wysanie) wysyane przez
uytkowników, którzy zdecyduj si wysa raport do firmy Microsoft.
Jednym z najwaniejszych plików takiego zbioru jest zrzut wykonany
w chwili wystpienia awarii. Plik ten mona wykorzysta do zdiagnozowa-
nia problemu poawaryjnie za pomoc technik opisanych wczeniej.
452
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Wiemy ju, jakie informacje s udostpniane poprzez usug WER
— wszystko od ogólnego przegldu zdarze po szczegóowe dane oparte na
informacjach przesanych przez uytkowników. Teraz zwrócimy nasz uwag
na ostatni etap procesu — udzielanie odpowiedzi uytkownikom po rozwi-
zaniu ich problemu.
Odpowiadanie na problemy
Aby odpowiedzie uytkownikom na okrelone zdarzenie, naley przej na
jego stron Event Details. Jeli jeszcze nie zostaa zarejestrowana dla niego
adna odpowied , na górze strony bd znajdoway si opcje suce do
rejestrowania odpowiedzi (rysunek 8.23).
Rysunek 8.23.
Opcje odpowiedzi na zdarzenie
S trzy róne poziomy rejestrowania odpowiedzi:
Event — wykorzystywany do publikowania poprawek pojedynczych
zdarze, które nie zostan wcielone do aktualizacji produktu.
Application — poziom aplikacji umoliwia tworzenie odpowiedzi,
które zostan przedstawione wszystkim uytkownikom majcym okre-
lon wersj programu. Taka odpowied moe mie posta aktualizacji
(np. nowej wersji).
Module — poziom moduu umoliwia tworzenie odpowiedzi prze-
znaczonych dla uytkowników uywajcych okrelonej wersji naszego
moduu. Taka odpowied moe mie posta aktualizacji (np. nowej
wersji).
My wybierzemy opcj rejestracji odpowiedzi na pojedyncze zdarzenie.
Kliknij pole wyboru Event, a nastpnie kliknij przycisk Register Response.
Teraz trzeba poda szczegóy odpowiedzi na zdarzenie. Do zarejestrowania
odpowiedzi potrzebne s nastpujce informacje:
U
S U G A R A P O R T O W A N I A B D Ó W
453
Products — nazwa produktu.
URL of Solution/Info — adres URL odpowiedzi. Adres ten powinien
prowadzi na stron zawierajc wszystkie informacje wymagane do
udzielenia odpowiedzi.
Response Template — szablon odpowiedzi. Mona wykorzysta go-
towy szablon albo zdefiniowa wasny. Przykadowe gotowe szablony
to: System Does Not Meet Minimum Requirements (system nie spenia
podstawowych wymaga), Product Upgrade (uaktualnienie produktu)
czy Upgrade to New Version (uaktualnienie do nowej wersji). Zalenie
od wybranej z tej listy opcji wygld pola podgldu moe si zmienia.
Response Template Preview — podgld informacji, które zostan
opublikowane w odpowiedzi.
Additional Information — dodatkowe informacje, które chcielibymy
doda do odpowiedzi.
Po wprowadzeniu wszystkich informacji kontynuujemy rejestracj
odpowiedzi, przechodzc na stron Response Management (zarzdzanie
odpowiedziami), na której znajduje si lista wszystkich odpowiedzi, jakie
zarejestrowalimy do tej pory. Naley zauway, e nowo zarejestrowana
odpowied nie jest publikowana natychmiast, lecz najpierw przechodzi przez
proces zatwierdzania, który trwa kilka dni. Na stronie Response Management
mona równie zarzdza wszystkimi wczeniej utworzonymi odpowiedziami.
Mona obejrze ich szczegóy, dokona w nich zmian oraz usun te, które
s ju nieaktualne.
Jak nasza odpowied zostanie przedstawiona uytkownikowi? Nastpnym
razem, gdy nastpi awaria programu, dla której zdefiniowano odpowied ,
zostanie wywietlone okno dialogowe widoczne na rysunku 8.24.
Rysunek 8.24.
Okno dialogowe wyświetlane w przypadku awarii aplikacji,
dla której jest opublikowane rozwiązanie
454
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Jeli uytkownik kliknie przycisk Zamknij program, zostanie wywietlone
powiadomienie, e dla problemu, który wystpi, jest dostpne rozwizanie.
Kliknicie komunikatu spowoduje wywietlenie okna dialogowego zawiera-
jcego tekst rozwizania, jak na rysunku 8.25.
Rysunek 8.25.
Okno dialogowe zawierające treść rozwiązania problemu z aplikacją
W tym przypadku uytkownik moe klikn cze The High-tech Avenue,
które przeniesie go na stron zawierajc szczegóowy opis rozwizania
problemu.
Raportowanie i subskrypcje
Dwie nowe funkcje dodane w usudze WER to raportowanie i subskrypcje.
Subskrypcje umoliwiaj otrzymywanie powiadomie dotyczcych okrelo-
nych zdarze. Aby uzyska dostp do tej funkcji, naley w menu Software
wybra element My Subscriptions. Na rysunku 8.26 przedstawione zostay
ustawienia dostpne w ramach tej funkcji.
Aby aktywowa wybran subskrypcj, naley zaznaczy jej pole wy-
boru. Dodatkowo mona okreli dat (a w niektórych przypadkach take
czstotliwo) wysyania powiadomienia poczt e-mail.
Funkcja raportowania to zestaw standardowych raportów, które mo-
na generowa dla danych przechowywanych w WER. W czasie pisania
tej ksiki dostpny by tylko jeden raport — o nazwie Response Satis-
faction, który przedstawia ogóln jako odpowiedzi oraz liczb wywie-
tle i wysanych przez uytkowników wyników ankiety. Funkcja rapor-
towania jest stosunkowo nowa i w przyszoci naley si spodziewa
powikszenia liczby raportów.
U
S U G A R A P O R T O W A N I A B D Ó W
455
Rysunek 8.26.
Opcje subskrypcji
Jak wida, WER to bardzo pomocna usuga umoliwiajca monitorowanie
dziaania aplikacji na komputerach rzeczywistych uytkowników. Moliwo
wysyania przez uytkowników informacji o awariach programu to niezwykle
cenna technologia, która znaczco przyczynia si do zmniejszenia proble-
mów powodowanych przez bdy w programach.
Dostęp do usługi WER z poziomu programu
Usuga Windows Error Reporting jest dla firm znakomitym narzdziem do
monitorowania ich aplikacji na komputerach uytkowników, umoliwiaj-
cym podejmowanie rodków zaradczych w razie wystpienia problemów.
Wystarczy utworzy konto i zarejestrowa swoje produkty, wic z nimi
pliki binarne, aby uzyska dostp do obszernych baz danych na temat bdów
wystpujcych w aplikacjach dziaajcych w realnych warunkach. Jedn
z wad tej usugi jest konieczno regularnego logowania si w witrynie w celu
sprawdzenia, czy pojawiy si nowe informacje o zdarzeniach. Jeli co jest,
mona pobra odpowiadajcy wybranemu zdarzeniu plik .cab, aby dokad-
niej zbada problem. Znacznie lepszym sposobem na monitorowanie
aplikacji poprzez WER jest jednak skorzystanie z udostpnianego przez t
usug API. API usug sieciowych umoliwiaj firmom tworzenie wasnych
456
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
systemów monitorujcych, które automatycznie pobieraj dane o zdarze-
niach z serwera. Warstw dostpu do swoich usug sieciowych zespó WER
opublikowa w serwisie CodePlex (http://www.codeplex.com/). Mona tam
dodatkowo znale kilka przykadowych projektów (m.in. gadet dla syste-
mu Windows Vista pobierajcy informacje z WER). Ponadto opublikowany
zosta równie zestaw klienta (http://wer.codeplex.com/Release/Project
Releases.aspx?ReleaseId=12825) udostpniajcy model obiektowy WER,
co znacznie uatwia prac nad wasnymi aplikacjami monitorujcymi. Rysu-
nek 8.27 przedstawia ogólny schemat dziaania usugi WER i modelu klient-
obiekt.
Rysunek 8.27.
Schemat pracy WER i modelu klient-obiekt
Korzystanie z WER zawsze zaczyna si od zalogowania si klienta w sys-
temie za pomoc klasy
Login
. Dane, których uywa si do tego logowania,
to dane uytkownika z uprawnieniami dostpu do konta (np. gównego ad-
ministratora). Jeli logowanie si powiedzie, obiekt logowania najczciej
jest zapisywany w pamici podrcznej aplikacji klienckiej i wykorzystywany
we wszystkich innych dziaaniach WER. Nastpnie aplikacja moe przeliczy
produkty dostpne na koncie (wczeniej poddane wizaniu za pomoc na-
U
S U G A R A P O R T O W A N I A B D Ó W
457
rzdzia Product Feedback Mapping Tool) i wybra te, które nas interesuj.
Do reprezentowania produktów suy klasa
Product
. Kady egzemplarz
klasy
Product
zawiera zbiór aplikacji odpowiadajcych kademu plikowi
binarnemu powizanemu w procesie wizania. Aplikacj reprezentuje
klasa
ApplicationFile
, która umoliwia uzyskanie szczegóowych in-
formacji o aplikacji. Podobnie jak klasa
Product
gromadzi zestaw aplikacji,
kada aplikacja gromadzi zestaw zdarze (reprezentowanych przez klas
Event
). Kady taki obiekt zdarzenia zawiera szczegóowe informacje, jak
np. typ zdarzenia i zwizane z nim pliki .cab. Klient moe wykorzysta te
informacje na róne sposoby, np. zapisa je w bazie danych albo doda do
systemu automatycznego ledzenia bdów.
Technik integrowania wasnego klienta z usug WER przedstawi na
przykadowej aplikacji konsolowej, która bdzie pobieraa szczegóy okre-
lonego zdarzenia. Kod ródowy tego programu znajduje si na listingu 8.2.
Listing 8.2.
Przykładowa aplikacja pobierająca dane z usługi WER
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.WindowsErrorReporting.Services.Data.API;
namespace Advanced.NET.Debugging.Chapter8
{
class WerConsole
{
static void Main(string[] args)
{
WerConsole s = new WerConsole();
s.Run();
}
public void Run()
{
int eventId;
string product, file, cabLoc, userName, password;
Login login;
Console.Write("Podaj nazw uytkownika: ");
userName = Console.ReadLine();
Console.Write("Podaj haso: ");
password = Console.ReadLine();
Console.WriteLine("Logowanie do WER...");
login=WerLogin(userName, password);
Console.WriteLine("Logowanie powiodo si");
458
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Console.Write("Podaj produkt: ");
product=Console.ReadLine();
Console.Write("Podaj plik: ");
file=Console.ReadLine();
Console.Write("Podaj identyfikator zdarzenia: ");
eventId=Int32.Parse(Console.ReadLine());
Console.Write("Podaj miejsce do zapisywania plików .cab: ");
cabLoc = Console.ReadLine();
if (Directory.Exists(cabLoc) == false)
{
Directory.CreateDirectory(cabLoc);
}
Event e=GetEvent(product, file, eventId, ref login);
Console.WriteLine("Zdarzenie pobrane");
Console.WriteLine("Identyfikator zdarzenia: " + e.ID);
Console.WriteLine("Liczba wystpie zdarzenia: " + e.TotalHits.ToString());
Console.WriteLine("Zapisywanie plików .cab...");
foreach (Cab c in e.GetCabs(ref login))
{
try
{
c.SaveCab(cabLoc, true, ref login);
}
catch (Exception)
{
}
}
Console.WriteLine("Miejsce zapisania plików .cab: " + cabLoc);
}
public Login WerLogin(string userName, string password)
{
Login login = new Login(userName, password);
login.Validate();
return login;
}
public Event GetEvent(string pr,
string fi,
int eventId,
ref Login login)
{
foreach (Product p in Product.GetProducts(ref login))
{
if (p.Name == pr)
{
ApplicationFileCollection ac =
p.GetApplicationFiles(ref login);
foreach (ApplicationFile file in ac)
{
if (file.Name == fi)
{
U
S U G A R A P O R T O W A N I A B D Ó W
459
EventPageReader epr=file.GetEvents();
while (epr.Read(ref login) == true)
{
EventReader er = epr.Events;
while (er.Read() == true)
{
Event e = er.Event;
return e;
}
}
}
}
}
}
throw new Exception("Nie znaleziono zdarzenia");
}
}
}
Kod ródowy i plik binarny tego programu znajduj si w nastpujcych
lokalizacjach:
Kod ródowy: C:\ADND\Chapter8\WerConsole
Plik binarny: C:\ADNDBin\08WerConsole.exe
Na potrzeby tego przykadu zestaw klienta WER (Microsoft.Windows
ErrorReporting.Services.Data.API.dll) zosta zapisany w folderze C:\ADND\
Chapter8\WerConsole i jest automatycznie zapisywany w folderze C:\ADNDBin
w procesie kompilacji projektu. Najnowsz wersj zestawu klienta WER
mona znale w witrynie CodePlex pod nastpujcym adresem:
http://wer.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12825
Jak wida na listingu 8.2, jest to prosta aplikacja wiersza polece proszca
na pocztku uytkownika o podanie nastpujcych informacji:
Nazwa uytkownika — nazwa uytkownika potrzebna do zalogowania
si w usudze WER.
Haso — haso uytkownika okrelonego wczeniej. Naley zwróci
uwag, e wprowadzone haso bdzie widoczne w konsoli.
Po otrzymaniu nazwy uytkownika i hasa aplikacja przekazuje te infor-
macje jako parametry za pomoc metody
Login
. W przypadku powodzenia
metoda ta zwraca egzemplarz klasy
Login
reprezentujcy now sesj WER.
Egzemplarz ten bdzie wykorzystywany w dalszej pracy. Po poczeniu si
z usug WER aplikacja prosi o podanie dodatkowych informacji:
460
R
O Z D Z I A
8 .
D
E B U G O W A N I E P O A W A R Y J N E
Produkt — nazwa interesujcego nas produktu.
Plik — interesujcy nas plik aplikacji.
Identyfikator zdarzenia — identyfikator interesujcego nas zdarzenia.
Miejsce do zapisywania plików .cab — miejsce, w którym maj zosta
zapisane pliki .cab zwizane z okrelonym identyfikatorem zdarzenia.
Po uzyskaniu powyszych informacji klient czy si z usug WER i
szuka zdarzenia. Robi to w nastpujcy sposób:
1.
Szuka okrelonego produktu, przeszukujc wszystkie produkty za-
rejestrowane przez firm (zwizane z uytkownikiem o okrelonej
nazwie).
2.
Szuka okrelonego pliku aplikacji, przeszukujc wszystkie pliki apli-
kacji zwizane z produktem znalezionym w punkcie 1.
3.
Szuka zdarzenia, przeszukujc wszystkie zdarzenia zwizane z plikiem
aplikacji znalezionym w punkcie 2.
4.
Jeli znajdzie zdarzenie, pobiera wszystkie zwizane z nim pliki .cab.
Naley zauway, e we wszystkich wymienionych wyej operacjach,
w których potrzebne jest odwoanie do WER, potrzebny jest równie eg-
zemplarz logowania (tzn. ustalonej sesji) przekazywany jako parametr.
Zobaczmy przykadow sesj dziaania naszego klienta:
C:\ADNDBin>0
08WerConsole.exe
Enter user name: MarioH
Enter password: <password>
Login into WER...
Login succeeded
Enter Product: Advanced .NET Debugging
Enter File: 08SimpleExc.exe
Enter Event ID: 504156229
Enter Location to store CABs: c:\zone\CAB
Event successfully retrieved
Event ID: 504156229
Event Total Hits: 2
Storing CABs...
CABs stored to: c:\zone\CAB
Czas pobierania plików moe by nieco dugi, jeli do pobrania jest duo
plików zawierajcych due iloci informacji. W folderze na pliki .cab znaj-
duj si teraz nastpujce pliki:
C:\ADNDBin>d
dir /B c:\Zone\cab
504156229-CLR20ManagedCrash-0605004230.cab
504156229-CLR20ManagedCrash-0605004408.cab
504156229-CLR20ManagedCrash-0605004551.cab
P
O D S U M O W A N I E
461
504156229-CLR20ManagedCrash-0605004647.cab
504156229-CLR20ManagedCrash-0605004808.cab
504156229-CLR20ManagedCrash-0605004930.cab
504156229-CLR20ManagedCrash-0605005030.cab
504156229-CLR20ManagedCrash-0605005112.cab
504156229-CLR20ManagedCrash-0606022813.cab
504156229-CLR20ManagedCrash-0606025125.cab
Moemy teraz wypakowa pobrane pliki .cab, zaadowa do debugera
odpowiedni plik zrzutu i spróbowa znale przyczyn problemu za pomoc
technik debugowania poawaryjnego.
Programowy dostp do usugi WER to niezwykle przydatna technologia
umoliwiajca firmom tworzenie wasnych systemów automatycznego mo-
nitorowania aplikacji, które mog bez problemu zintegrowa ze swoimi
systemami ledzenia bdów. Bez trudu mona sobie wyobrazi usug,
która okresowo czy si z WER w celu pobrania do bazy danych nowych
informacji o bdach i która jest zintegrowana z firmowym systemem le-
dzenia bdów. Dziki temu programici s na bieco informowani o b-
dach i mog szybko na nie reagowa.
Podsumowanie
Debugowanie poawaryjne to jedna z najwaniejszych technik w pracy
inyniera oprogramowania. Po dostarczeniu programu do klientów bardzo
trudno jest rozwizywa jakiekolwiek problemy, dlatego posiadanie wiedzy
i moliwo szybkiego oraz precyzyjnego reagowania na bdy s warun-
kiem zminimalizowania kopotów po stronie klienta.
W tym rozdziale dowiedzielimy si, dlaczego czasami konieczne jest
zastosowanie technik debugowania poawaryjnego. Wiemy ju, jakie s po-
trzebne do tego informacje oraz jakie narzdzia su do ich zbierania. Wiemy
równie, jak wykorzysta dane zgromadzone w debugerze, aby rozwiza
zaistniay problem.
Szczegóowo zostaa opisana usuga Windows Error Reporting, która
umoliwia monitorowanie aplikacji w realnych zastosowaniach oraz udostp-
nia informacje o bdach (np. zrzuty awaryjne) zwizanych z poszczególnymi
zdarzeniami i umoliwia zdefiniowanie reakcji na te bdy. Ponadto naj-
nowsze udoskonalenia usugi WER pozwalaj na dostp do niej z poziomu
programów, dziki czemu mona jeszcze lepiej zorganizowa proces kon-
serwacji programu.