Debugowanie NET Zaawansowane techniki diagnostyczne debnet


Debugowanie .NET.
Idz do
Zaawansowane techniki
" Spis treści
diagnostyczne
" Przykładowy rozdział
Autor: Mario Hewardt
TÅ‚umaczenie: Aukasz Piwko
Katalog książek
ISBN: 978-83-246-2721-9
Tytuł oryginału: Advanced .NET Debugging
" Katalog online
Format: 168×237, stron: 528
" Zamów drukowany
katalog
Sprawdz, jak rozwiązują problemy najlepsi specjaliści!
Twój koszyk
" Jak stworzyć niezawodny kod?
" Jak rozwiązywać problemy z synchronizacją wątków?
" Jak wykorzystać usługę raportowania błędów?
" Dodaj do koszyka
Czy znasz programistę, który nigdy w życiu nie użył debuggera? Dzisiejsze rozbudowane
i skomplikowane systemy informatyczne wymagają znakomitej znajomości zaawansowanych
Cennik i informacje
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,
" Zamów informacje
czy zgromadziłeś już wszystkie potrzebne Ci informacje, sięgnij po tę książkę  pozwoli to
o nowościach
błyskawicznie uzupełnić brakujące dane!
" Zamów cennik
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
Czytelnia
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
" Fragmenty książek
wykrywać błędy w zarządzaniu stertą, jak rozwiązywać kłopoty z pamięcią oraz jak radzić sobie
online
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
Kontakt " Metody diagnozowania wycieków interoperacyjności
" Wykorzystanie plików obrazu
" Generowanie zrzutów z wykorzystaniem debuggera
Helion SA
" Wykorzystanie usługi raportowania błędów
ul. Kościuszki 1c
" Dostępne dodatkowe narzędzia, wspierające proces diagnostyczny
44-100 Gliwice
tel. 32 230 98 63
Twórz niezawodne oprogramowanie!
e-mail: helion@helion.pl
© Helion 1991 2010
SPIS TREÅšCI
Przedmowa ...........................................................................17
Wstęp ....................................................................................19
Podziękowania .....................................................................29
O autorze ..............................................................................31
CZŚĆ I PODSTAWY ...................................................................................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
Aadowanie obrazów rodzimych ........................................................................ 60
Aadowanie zestawów .NET .................................................................................. 62
Domeny aplikacji ........................................................................................................... 66
Systemowa domena aplikacji ............................................................................ 69
Wspólna domena aplikacji ......................................................................................... 70
Domyślna domena aplikacji ............................................................................... 70
7
8 SPIS TRE CI
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
Aadowanie rozszerzeń kodu zarządzanego .......................................................116
Aadowanie rozszerzenia SOS ............................................................................118
Aadowanie 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
SPIS TRE CI 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
CZŚĆ II DIAGNOSTYKA 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 SPIS TRE CI
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
SPIS TRE CI 11
CZŚĆ III TECHNIKI 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 zró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 SPIS TRE CI
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
R OZ DZ I A 8
DEBUGOWANIE POAWARYJNE
W poprzednich dwóch cz ciach ksi ki poznali my wiele znakomitych na-
rz dzi wspomagaj cych w pracy programist diagnozuj cego aplikacje. Na-
rz dzia te nale y w czy do procesu rozwoju oprogramowania, aby zapewni
jak najwy szy stopie jego niezawodno ci. Mimo i wszystkie te narz dzia
stanowi doskona pomoc w znajdowaniu b dów poprzez automatyzowanie
procesu ich wyszukiwania, nie gwarantuj , e gotowy produkt b dzie ab-
solutnie bezb dny.
Po dostarczeniu programu do u ytkowników problemy pojawi si na
pewno i najprawdopodobniej stanie si to w najmniej oczekiwanym mo-
mencie  najcz ciej podczas pracy u ytkownika. W zale no ci od rodzaju
b d mo e ca kowicie zniech ci u ytkownika do dalszego korzystania
z programu lub tylko nieco uprzykrzy mu ycie. W obu tych przypadkach
mo na si spodziewa telefonu od zdenerwowanego klienta daj cego wy-
ja nie , czemu jego produkt nie dzia a tak, jak powinien. Jedn z mo liwo ci
w takiej sytuacji jest poproszenie go o zdalny dost p do jego komputera.
Mimo i czasami jest to mo liwe, u ytkownicy najcz ciej podchodz do tego
niech tnie i nie zgadzaj si na takie rozwi zanie. Powodów, dla których
klienci nie chc umo liwia dost pu do swoich komputerów, jest wiele.
Poni ej przedstawiam kilka najcz stszych z nich:
Zasady ustalone w firmie nie pozwalaj na przyjmowanie po cze
przychodz cych.
Zdalne diagnozowanie wymaga pod czenia debugera do jednego lub
wi kszej liczby procesów, co oznacza przestój w pracy. Je li proces,
który ma zosta zdiagnozowany, dzia a na wa nym serwerze, klient nie
b dzie chcia zaakceptowa na nim przestoju.
Diagnozowanie procesu poprzez tryb u ytkownika lub j dra oznacza,
e programi ci maj pe ny dost p do stanu urz dzenia, w cznie z za-
warto ci jego pami ci. Niektórzy u ytkownicy mog obawia si
w takim przypadku naruszenia prywatno ci.
415
416 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Je li klient odmówi dost pu zdalnego, a odtworzenie problemu na lokal-
nym komputerze jest niemo liwe, to czy w ogóle da si co zrobi ? Tak,
nale y wówczas zastosowa techniki tzw. debugowania poawaryjnego (ang.
postmortem debugging). Proces ten sk ada si z nast puj cych etapów:
1. Wywo anie awarii.
2. Wykonanie zrzutu (obrazu) stanu systemu w chwili awarii (albo
 w niektórych przypadkach  przed awari i po niej).
3. Przes anie zrzutu do przeanalizowania specjalistom.
W tym rozdziale zosta y 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 us ug
gromadzenia plików obrazu o nazwie Windows Error Reporting.
Zaczniemy od podstawowych zagadnie zwi zanych z plikami obrazu.
Pliki obrazu  podstawowe wiadomości
Jak ju wiemy, plik obrazu stanowi reprezentacj stanu okre lonego procesu.
Pliki takie tworzy si przede wszystkim w celu umo liwienia diagnozowania
aplikacji, gdy nie ma mo liwo ci przeprowadzenia diagnostyki na dzia aj cym
programie. Wygenerowany plik obrazu wysy a si do specjalisty, który anali-
zuje jego zawarto , nie maj c dost pu do urz dzenia, na którym wyst pi
problem. Praca ta polega na zapisaniu pliku na innym komputerze i analizo-
waniu go za pomoc narz dzi do diagnozowania poawaryjnego debugera.
Jakie informacje zawiera taki plik obrazu? To zale y od sposobu jego utwo-
rzenia. Wyró nia si dwa g ówne rodzaje plików obrazu:
pe ne zrzuty,
zrzuty minimalne.
Pe ny zrzut zawiera ca przestrze pami ci procesu, obraz pliku wy-
konywalnego, tabel uchwytów i inne informacje wykorzystywane przez
debugery. Przy generowaniu pe nego zrzutu nie ma mo liwo ci wybierania,
które informacje maj zosta zapisane. Plik taki mo na jednak przekonwer-
towa na zrzut minimalny za pomoc debugera.
Minimalny plik zrzutu mo e zawiera ró ne informacje, których wybór
jest dokonywany przez modu generuj cy. Plik taki mo e zawiera zarówno
informacje o konkretnym w tku, jak i pe ny opis obrazowanego procesu.
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 417
Mo e to zabrzmi dziwnie, ale najwi kszy mo liwy minimalny plik zrzutu
mo e zawiera wi cej informacji ni zrzut pe ny. Dlatego w tej cz ci roz-
dzia u skoncentruj si na zrzutach minimalnych.
Narz dzia, za pomoc których mo na generowa takie pliki, zosta y
zwi le opisane w tabeli 8.1.
Tabela 8.1. Narzędzia do generowania zrzutów
Nazwa Opis
Debugery Windows Debugery systemu Windows umo liwiaj tworzenie zrzutów
o ró nych rozmiarach oraz pozwalaj kontrolowa ca y proces
generowania pliku
ADPlus ADPlus to sk adnik pakietu Debugging Tools for Windows.
Narz dzie to mo e dzia a jako monitor systemu wykonuj cy zrzut
w chwili wyst pienia awarii lub zawieszenia. Ponadto program
ten ma opcj powiadamiania o wyst pieniu awarii
Windows Windows Error Reporting to us uga firmy Microsoft umo liwiaj ca
Error Reporting zarejestrowanie si w witrynie do raportowania b dów.
Gdy w której z aplikacji danego u ytkownika wyst pi awaria,
z komputera, w którym ona dzia a, wysy any jest raport do witryny
Windows Error Reporting (WER). Nast pnie u ytkownik mo e
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 narz dzia ADPlus. Us uga Windows Error Repor-
ting zostanie opisana nieco dalej.
W celu zilustrowania procesu tworzenia plików obrazu wykorzystamy
przyk adow prost aplikacj alokuj c pami na stercie, zapisuj c w niej
dane i nast pnie ulegaj c awarii. Kod ród owy 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 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
static void Main(string[] args)
{
SimpleExc s = new SimpleExc();
s.Run();
}
public void Run()
{
Console.WriteLine("Naci nij 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ód owy i plik binarny powy szego programu znajduj si w nast -
puj cych lokalizacjach:
Kod ród owy: C:\ADND\Chapter8\SimpleExc
Plik binarny: C:\ADNDBin\08SimpleExc.exe
Powód awarii tej aplikacji powinien by do oczywisty. Wywo anie funk-
cji ProcessData powoduje zg oszenie wyj tku ArgumentException,
poniewa zosta a jej przekazana warto null. Na pocz tek wygenerujemy
zrzut za pomoc debugera.
Generowanie zrzutów przy użyciu debugera
Uruchom aplikacj , której kod ród owy znajduje si na listingu 8.1, i po-
zwól jej dzia a do wyst pienia wyj tku.
&
&
&
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)
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 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. Najwa niejsz kwesti do rozwi zania w przypadku genero-
wania zrzutu jest podj cie decyzji, ile informacji zapisa . Ogólna zasada jest
taka, e im wi cej danych znajduje si w pliku obrazu, tym wi cej informacji
b dziemy mieli do wykorzystania w pracy. Najwa niejszym czynnikiem
ograniczaj cym jest oczywi cie rozmiar pliku zrzutu. W niektórych przy-
padkach, np. na serwerach o ostrych zasadach bezpiecze stwa, utworzenie
gigantycznego zrzutu jest niemo liwe i trzeba zadowoli si okrojon ilo ci
informacji.
Do utworzenia pliku obrazu s u y 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 steruj cych wykonywaniem zrzutu nale y poda jeszcze
nazw pliku, w którym zrzut zostanie zapisany. Je li nie zostanie okre lona
pe na cie ka katalogu, w którym ma zosta zapisany ten plik, zostanie on
zapisany w katalogu uruchomieniowym debugera. Poni ej znajduje si przy-
k adowe polecenie wykonuj ce pe ny zrzut pami ci i zapisuj ce 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 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Tabela 8.2. Opcje polecenia .dump
Opcja Opis
a
Generuje kompletny zrzut minimalny z w czonymi wszystkimi opcjami. Zrzut
taki zawiera pe ne dane dotycz ce pami ci, uchwytów, modu u, podstawowe
dane o pami ci oraz informacje na temat w tku. Równoznaczne z /mfFhut
f
Generuje zrzut minimalny zawieraj cy wszystkie dost pne i zastrze one
strony procesu
F
Generuje zrzut minimalny zawieraj cy podstawowe informacje o pami ci potrzebne
debugerowi do odtworzenia ca ej przestrzeni adresowej pami ci wirtualnej
h
Generuje zrzut minimalny zawieraj cy informacje o uchwytach
u
Generuje zrzut minimalny zawieraj cy informacje o nieza adowanych modu ach.
Opcja dost pna tylko w systemie Windows Server 2003
t
Generuje zrzut minimalny zawieraj cy informacje czasowe dotycz ce w tków.
Informacje te to m.in. czas utworzenia oraz czas pracy w trybach u ytkownika
i j dra
i
Generuje zrzut minimalny zawieraj cy informacje o pami ci pomocniczej.
Pami pomocnicza to pami (oraz niewielki obszar j otaczaj cy) wskazywana
przez wska nik stosu lub pami rezerwow
p
Generuje zrzut minimalny zawieraj cy bloki rodowisk procesu i w tku
w
Generuje zrzut minimalny zawieraj cy wszystkie zastrze one prywatne strony
do zapisu i odczytu
d
Generuje zrzut minimalny zawieraj cy wszystkie segmenty danych obrazu
c
Generuje zrzut minimalny zawieraj cy segmenty kodu obrazu
r
Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotycz cych prywatno ci. Opcja ta czy ci (zast puje zerami) wszystkie informacje
niepotrzebne do odtworzenia stosu (w cznie ze zmiennymi lokalnymi)
R
Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotycz cych prywatno ci. Ta opcja usuwa pe ne cie ki modu ów, uniemo liwiaj c
w ten sposób odtworzenie struktury katalogów
Wygenerowany plik zrzutu powinien mie rozmiar oko o 64 MB. Plik ten
nale y za adowa w innej instancji debugera przy u yciu prze cznika -z.
Aby za adowa wygenerowany przez nas plik, nale y napisa nast puj ce
polecenie:
c:\>ntsd  z 08dumpfile.dmp
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 421
Po wczytaniu pliku debuger wy wietli nast puj ce 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 cz ci powy szych danych znajduj si podstawowe informacje
na temat wczytanego pliku zrzutu. W ród nich jest lokalizacja pliku, jego typ
oraz opis dost pnych danych. Kolejny interesuj cy nas fragment znajduje si
bli ej ko ca. Jest to opis powodu wyst pienia awarii (wyj tek CLR). Maj c
ten plik, mo na zdiagnozowa problem na dowolnym komputerze  bez
dost pu do urz dzenia, na którym wyst pi a 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 pod czenia go do ulegaj cego awarii procesu. Mo e si wydawa ,
e to niewielki problem, ale wyobra sobie, e b d wyst puje tylko raz na
jaki czas i nie uda o si trafi z pod czeniem debugera w a nie w tym
czasie. Dobrze by by o, gdyby my mieli mo liwo nakazania systemowi
Windows wykonania zrzutu, gdy wyst pi awaria procesu. Taka mo liwo
jest i technik t potocznie nazywa si nastawieniem debugera poawaryjne-
go. Domy lnym programem tego typu u ywanym 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
nast pi awaria procesu, i umo liwia wys anie tego pliku do firmy Microsoft
do analizy. Wykorzystywany debuger poawaryjny mo na jednak zmieni
przy u yciu polece wiersza polece przedstawionych w tabeli 8.3.
422 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Tabela 8.3. Ustawienia debugera poawaryjnego
Wartość rejestru
Polecenie Opis
Aedebug\Debugger
WinDbg  I winDbg.exe -p %ld  e %ld -g
Ustawia WinDbg jako debuger
poawaryjny. Nale y pami ta ,
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]
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 423
Co tak naprawd dzieje si w czasie wykonywania polece z tabeli 8.3?
Nic wielkiego. Polecenia te zmieniaj tylko warto ci niektórych kluczy reje-
stru, które s sprawdzane przez system Windows przy wykrywaniu awarii
procesów. Poni ej znajduje si cie ka rejestru wykorzystywana do nasta-
wiania debugera poawaryjnego:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug
Klucz Aedebug dzia a znakomicie w przypadku diagnozowania aplikacji
rodzimych. Natomiast do sterowania procesem diagnozowania poawaryjnego
aplikacji zarz dzanych s u dwie inne warto ci  DbgManagedDebugger
i DbgJITDebugLaunchSetting. Znajduj si one w nast puj cym kluczu:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
Wartość DbgManagedDebugger
Je li debugowanie poawaryjne zostanie w czone poprzez warto DbgJIT
DebugLaunchSettings, warto rejestru DbgManagedDebugger okre la,
który debuger ma zosta uruchomiony w przypadku wyst pienia nieobs u-
onego wyj tku. Aby np. domy lnym debugerem uruchamianym w przy-
padkach wyst pienia nieobs u onych wyj tków by ntsd, warto rejestru
DbgManagedDebugger nale y ustawi nast puj co:
c:\program files\debugging tools for windows (x86)\ntsd.exe -p %ld
Debuger okre lony w warto ci DbgManagedDebugger nie musi zosta
uruchomiony natychmiast po wyst pieniu nieobs u onego wyj tku. Zamiast
tego zostanie wy wietlone okno dialogowe, w którym mo na wybra uru-
chomienie debugera lub zamkni cie aplikacji.
Jedno z najcz ciej zadawanych pyta na temat debugowania poawa-
ryjnego brzmi: jak wymusi automatyczne generowanie zrzutu w odpowie-
dzi na wyst pienie awarii? Aby to zrobi , nale y ustawi warto rejestru
DbgManagedDebugger w nast puj cy sposób:
ntsd  pv  p %ld  c ".dump /u /ma < cie ka do pliku zrzutu>; .kill; qd
Powy sze ustawienie oznacza, e je li wyst pi awaria, ma zosta w czony
debuger ntsd oraz uruchomione polecenie wykonania zrzutu. Nast pnie sesja
ma zosta zamkni ta poprzez od czenie debugera.
Do precyzyjnego okre lania dzia a w przypadku wyst pienia nieob-
s u onego wyj tku s u y warto rejestru DbgJITDebugLaunchSetting
opisana w nast pnym podrozdziale.
424 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Wartość DbgJITDebugLaunchSetting
Warto rejestru DbgJITDebugLaunchSetting s u y do okre lania dzia a
w przypadku wyst pienia nieobs u onego wyj tku. Je li warto ta zostanie
ustawiona na 0, w przypadku awarii b dzie wy wietlane okno dialogowe,
w którym u ytkownik b dzie móg zdecydowa , co robi . Nale y pami ta ,
e okno to jest wy wietlane tylko dla procesów interaktywnych (np. us ug),
pozosta e procesy b d po prostu zamykane. Przyk adowe okno dialogowe
przedstawiono na rysunku 8.1.
Rysunek 8.1. Przykładowe okno dialogowe wyświetlone po awarii aplikacji zarządzanej
Powy sze okno poawaryjne informuje o wyst pieniu problemu w pro-
gramie o nazwie 08SimpleExc.exe. U ytkownik mo e si w nim zdecydowa
na debugowanie programu (przycisk Debuguj) lub jego zamkni cie (przycisk
Zamknij program). Je li zostanie naci ni ty przycisk Debuguj, system
sprawdzi ustawienie warto ci DbgJITDebugLaunchSetting i uruchomi
wyznaczony w niej debuger.
Je li warto DbgJITDebugLaunchSetting zostanie ustawiona na 1,
aplikacja, która uleg a awarii, zostanie zamkni ta i zostanie zwrócony zrzut
stosu wywo a .
Je li warto ta b dzie ustawiona na 2, zostanie uruchomiony debuger
okre lony w warto ci DbgManagedDebugger bez wy wietlania adnych
okien dialogowych.
Natomiast ustawienie warto ci DbgJITDebugLaunchSetting na 16
spowoduje wy wietlanie dla procesów interaktywnych okna opisanego
powy ej, a dla pozosta ych procesów  uruchomienie debugera okre lonego
w warto ci DbgManagedDebugger.
Mimo i funkcje debugerów s wystarczaj ce do wygenerowania od-
powiedniego pliku zrzutu, dost pne jest jeszcze jedno narz dzie, które s u y
do generowania tych plików  ma ono nazw ADPlus.
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 425
Generowanie plików zrzutu
za pomocą narzędzia ADPlus
ADPlus to narz dzie do monitorowania awarii procesów i automatyzowania
generowania plików zrzutu z mo liwo ci powiadamiania u ytkownika lub
komputera o zaistnia ej sytuacji. ADPlus to skrypt sterowany z wiersza po-
lece . Firma Microsoft zaleca uruchamianie go przy u yciu interpretera
cscript.exe. Oprócz opcji wiersza polece ADPlus mo na równie konfigu-
rowa za pomoc plików konfiguracyjnych, które umo liwiaj bardziej pre-
cyzyjne sterowanie dzia aniem programu.
ADPlus mo e dzia a w jednym z dwóch trybów:
Tryb zawiesze  s u y do diagnozowania procesów wykazuj -
cych oznaki zawieszenia (np. nie robi adnego post pu albo wy-
korzystuj 100% mocy procesora). Aby monitorowa zawieszone
procesy, ADPlus musi zosta uruchomiony po ich zawieszeniu.
Tryb awaryjny  s u y do diagnozowania procesów wykazuj cych
oznaki wyst pienia awarii. ADPlus musi zosta uruchomiony przed
procesem, w którym nast pi a awaria.
Generowanie plików zrzutu za pomoc narz dzia ADPlus zilustruj na
przyk adzie awarii programu 08SimpleExc.exe (tryb awaryjny). Uruchom
program SimpleExc.exe:
C:\ADNDBin\08SimpleExc.exe
Przed naci ni ciem klawisza w celu kontynuowania dzia ania aplikacji
wpisz nast puj ce polecenie:
C:\>adplus.vbs -crash -pn 08SimpleExc.exe -y
SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols
Prze cznik -crash przestawia narz dzie ADPlus na tryb awaryjny, -pn
s u y do okre lania nazwy procesu, który ma by monitorowany, a -y  do
ustawiania cie ki symboli, która ma by wykorzystywana podczas dzia ania
ADPlus. Wielk zalet prze cznika -pn jest mo liwo monitorowania do-
wolnej liczby instancji dowolnego procesu.
Po zako czeniu dzia ania programu ADPlus zapisuje wynik swojego
dzia ania w pliku w katalogu instalacyjnym debugerów systemu Windows.
Nazwa tego katalogu ma nast puj c struktur :
_Mode__Date___Time_
426 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Np. w tym przypadku po zako czeniu dzia ania ADPlus utworzy nast -
puj cy katalog:
c:\Program Files\Debugging Tools for Windows (x86)\
Crash_Mode__Date_03-02-2009__Time_08-31-43AM
Domy ln cie k mo na zmieni za pomoc prze cznika -o.
W powy szym katalogu zosta o zapisanych kilka plików, ale najwa niej-
sze z nich maj rozszerzenie .dmp, poniewa zawieraj wszystkie informacje
zrzutowe. Jak wida , w katalogu znajduje si kilka plików zrzutu. Dlaczego
jest wi cej ni jeden plik dla jednej awarii? Program ADPlus automatyzuje
proces gromadzenia plików zrzutu i dlatego generuje kolejne pliki w przy-
padku wyst pienia z góry okre lonych sytuacji. Powód wygenerowania
ka dego pliku mo na odczyta z jego nazwy. W naszym przyk adzie pro-
gram ADPlus wygenerowa nast puj ce 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 pe ny plik zrzutu po wyst pieniu pierwszego zda-
rzenia zamkni cia procesu. Nast pnie wygenerowa kolejny pe ny zrzut po
wyst pieniu wyj tku .NET. Czy potrzebne nam s te wszystkie pliki w na-
szej sytuacji? Nie. Dla nas najbardziej interesuj cy jest drugi plik  wyge-
nerowany po wyst pieniu wyj tku .NET. Oczywi cie w niektórych sytu-
acjach takie okresowe generowanie plików zrzutu jest bardzo pomocne,
poniewa mo na odtworzy przebieg systematycznego psucia si procesu.
ADPlus umo liwia równie ustawianie cz stotliwo ci zapisywania informacji
oraz warunków, w jakich ma to by robione, co w istocie oznacza, e pozwala
na sterowanie dzia aniem debugera za pomoc skryptów. Szczegó owe in-
formacje na temat pisania skryptów w ADPlus znajduj si w dokumentacji
programu. Nale y jednak koniecznie pami ta , 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 nast pnie
t umaczone na zwyk e zautomatyzowane polecenia. Aby zobaczy , jak ta
wygodna konfiguracja przek ada si na polecenia debugera, mo na zajrze
do folderu CDBScripts znajduj cego si w tym samym katalogu co pliki
zrzutu. W naszym przyk adzie w folderze tym znajduje si plik o nazwie
PID-4448__08SimpleExc.exe.cfg zawieraj cy wszystkie polecenia debugera
u yte w sesji diagnostycznej.
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 427
Ostatni wa n rzecz , któr trzeba wiedzie na temat programu AD-
Plus, jest sposób okre lania typu pliku zrzutu generowanego w odpowiedzi
na wyst pienie awarii. S u do tego cztery prze czniki wiersza polece :
-FullOnFirst  generuje pe ny zrzut przy pierwszym wyst pieniu
wyj tku.
-MiniOnSecond  generuje zrzut minimalny przy drugim wyst -
pieniu wyj tku.
-NoDumpOnFirst  blokuje generowanie zrzutu minimalnego przy
pierwszym wyst pieniu wyj tku. Opcja ta jest przydatna w przypadku
aplikacji, które dobrze obs uguj pierwsze wyst pienie wyj tku.
-NoDumpOnSecond  blokuje generowanie zrzutu minimalnego
przy drugim wyst pieniu wyj tku.
ADPlus to wygodne, elastyczne i bardzo pomocne narz dzie do monito-
rowania procesów i gromadzenia informacji o wyst puj cych w nich awa-
riach. W tym podrozdziale zosta y opisane podstawowe wiadomo ci o tym
programie. Warto jednak po wi ci troch czasu na zapoznanie si z innymi
jego mo liwo ciami, jak np. skrypty i techniki definiowania niestandardo-
wych procedur obs ugi wyj tków, które umo liwiaj generowanie zrzutów
w odpowiedzi na wyst pienie niestandardowych wyj tków.
Znaj c dwa najcz ciej stosowane sposoby tworzenia plików zrzutu, mo-
emy przyst pi do ich praktycznego wykorzystania i zapozna si z pro-
cesem rozwi zywania problemów przy ich u yciu.
Diagnozowanie plików zrzutu
Mamy ju pliki zrzutu i powierzono nam zadanie znalezienia przyczyny
problemów z procesem. Co konkretnie mo emy zrobi z dostarczonymi nam
plikami? Czy mo emy wykona z nich zrzut pami ci, obejrze uchwyty albo
wykona kod krok po kroku? Przypominam, e plik zrzutu jest tylko statycz-
nym obrazem stanu procesu w okre lonym momencie. Dlatego ustawianie
punktów wstrzymania i wykonywanie kodu krok po kroku jest niemo liwe.
Korzystanie z plików zrzutu naj atwiej porówna z r cznym debugowa-
niem. Mam na my li to, e mo emy tylko ogl da stan aplikacji i na tej
podstawie musimy opracowa teori na temat tego, jaki kod doprowadzi
do zaistnia ej sytuacji. Nietrudno si domy li , e odtwarzanie sekwencji
wykonywania kodu na podstawie statycznej analizy jest znacznie trudniejsze
ni analizowanie programu w czasie dzia ania. Niemniej jednak w statycz-
nym trybie nadal mo na korzysta z wielu polece , które przetwarzaj dane
428 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
na bardziej zrozumia posta , i w wi kszo ci przypadków, je li tylko
oka e si wystarczaj co du o cierpliwo ci, udaje si odnale przyczyn
problemów.
Przed przej ciem do analizowania wygenerowanych plików zrzutu mu-
simy pozna dwa bardzo wa ne poj cia  pliki symboli i warstwa dost pu
do danych. Poniewa pliki zrzutu nie zawieraj symboli, symbole te musz
by dost pne z jakiego innego ród a w czasie sesji diagnostycznej. We
wcze niejszych cz ciach tej ksi ki poznali my najwa niejsze polecenia
zwi zane z symbolami. Drug wa n rzecz jest tzw. warstwa dost pu do
danych CLR (ang. data access layer  DAC), z której bardzo cz sto korzysta
rozszerzenie SOS debugera w celu dostarczenia wszystkich potrzebnych
w sesji informacji.
Warstwa dostępu do danych
Podczas diagnozowania aplikacji rodzimych wiele informacji mo na zdoby
poprzez przegl danie surowej pami ci. Natomiast w kodzie zarz dzanym
rozszerzenie SOS zwracane przez siebie dane tworzy na podstawie informacji
uzyskanych w du ym stopniu od CLR. Rozszerzenie to, odbieraj c surowe
dane, musi je poprawnie przetworzy , korzystaj c z pomocy w postaci wy-
wo a do CLR (tzn. wykonywania kodu CLR). Za zwi zane z tym funkcje
w CLR odpowiada modu o nazwie warstwa dost pu do danych (DAC), któ-
rego implementacja znajduje si w pliku mscordacwks.dll. Poniewa system
CLR jest ca y czas ulepszany, jego warstwa DAC równie zmienia si z ka d
wersj (w cznie z poprawkami). Mo na to atwo sprawdzi , zagl daj c do
folderu instalacyjnego ka dej wersji .NET zainstalowanej w komputerze.
Np. w moim komputerze plik mscordacwks.dll znajduje si w nast puj cym
folderze:
c:\Windows\Microsoft.NET\Framework\v2.0.50727
Natomiast w komputerach z zainstalowanym programem Visual Studio
2010 CTP plik ten znajduje si w nast puj cych 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 niezb dna, poniewa debuger za -
da podania mu tej informacji. W czasie debugowania na ywo ten problem
nie wyst puje, poniewa rozszerzenie SOS znajduje ten plik, szukaj c go
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 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 u yta w aplikacji mo e
by inna ni wersja dost pna na komputerze, na którym jest wczytywany
i diagnozowany plik zrzutu. Przypominam zatem, e rozszerzenie SOS
debugera odwo uje si do pliku mscordacwks.dll, który wykonuje kod CLR,
oraz e za adowanie odpowiedniej wersji tego pliku ma kluczowe znacze-
nie. Poniewa posiadanie odpowiedniej wersji tego pliku jest tak wa ne,
firma Microsoft udost pnia wszystkie istniej ce jego wersje na swoim ser-
werze symboli publicznych. Je li 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 w asno-
r cznie okre li lokalizacj tego pliku. Mo e 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 nale y skorzysta
z polecenia cordll s u cego do okre lania sposobu adowania pliku
mscordacwks.dll. Polecenie to jest bezcenne, gdy wyst pi problemy z do-
pasowaniem wersji tego pliku. W tabeli 8.4 znajduje si opis prze czników
polecenia cordll.
Sk d wiadomo, czy nale y si zainteresowa poleceniem cordll? Za-
zwyczaj je li wyst pi niezgodno wersji pliku mscordacwks.dll, rozsze-
rzenie SOS zwraca nast puj c informacj o b dzie (lub co podobnego),
gdy nie mo e 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 zg oszonym powy ej przez de-
buger. Pierwsza z nich jest prosta, poniewa debuger prosi nas, aby my si
upewnili, czy korzystamy z najnowszej wersji debugerów (6.2.14 lub nowszej).
430 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Tabela 8.4. Przełączniki polecenia cordll
Przełącznik Opis
-l
aduje modu y debuguj ce, szukaj c pliku DLL na domy lnych cie kach
-u
Usuwa modu y debuguj ce z pami ci
-e
W cza debugowanie CLR
-d
Wy cza debugowanie CLR
-D
Wy cza debugowanie CLR i usuwa modu y debuguj ce
-N
Ponownie aduje modu y debuguj ce
-lp
Okre la cie k do katalogu zawieraj cego modu y debuguj ce
-Se
Umo liwia u ywanie wersji o krótkiej nazwie modu u debuguj cego
 mscordacwks.dll
-sd
Wy cza mo liwo u ywania wersji o krótkiej nazwie modu u
debuguj cego  mscordacwks.dll. Je li ten prze cznik zostanie u yty,
debuger spodziewa si , e nazwa modu u debuguj cego b dzie mia a
nast puj cy format: mscordacwks_.dll, gdzie to
__
-ve
W cza tryb wzbogacony. Tryb ten jest przydatny przy pracy
z nieprawid owymi dopasowaniami, poniewa dostarcza informacji
na temat tego, jak debuger próbuje za adowa modu y debuguj ce
-vd
Wy cza tryb wzbogacony
Druga podpowied jest równie prosta. Debuger podpowiada nam, aby my
si upewnili, e nasza wersja pliku mscordacwks.dll jest taka sama jak wersja,
która jest adowana. Jak pami tamy, 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
je li jest wykonywane diagnozowanie pliku zrzutu, nale y sprawdzi , czy
plik mscordacwks__.dll znajduje si na cie ce symboli. Co to za plik?
W tabeli 8.4 znajduje si polecenie -sd w czaj ce d ug nazw pliku
mscordacwks.dll. D uga nazwa to nazwa z dodan informacj o architektu-
rze i numerem kompilacji pliku DLL. Dzi ki tym informacjom mo na
zmodyfikowa cie k symboli, aby wskazywa a w a ciwy plik DLL, oraz
ponownie wykona polecenie cordll, aby ponownie za adowa plik
mscordacwks.dll. Je li np. do wykonania pliku zrzutu wykorzystano wersj
1.1.1.0 pliku mscordacwks.dll oraz dokonano tego w komputerze x86, mo na
PLIKI OBRAZU  PODSTAWOWE WIADOMO CI 431
nazw pliku mscordacwks.dll zmieni na mscordacwks_x86_x86_1.1.1.0.dll,
ustawi cie k symboli debugerów na jego lokalizacj i ponownie za a-
dowa modu y debuguj ce za pomoc polecenia cordll.
0:008> .sympath+
.
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. Je li np. u yto by 64-bitowego debugera do wygenerowania
pliku zrzutu procesu 32-bitowego dzia aj cego w systemie 64-bitowym przy
u yciu nak adki WOW64, nie uda oby si przeprowadzi diagnostyki tego
pliku.
W ostatnim wierszu powy szych danych znajduje si pytanie, czy na
cie ce plików wykonywalnych znajduje si plik mscorwks.dll. Zawarto
cie ki plików wykonywalnych mo na zmieni w debugerze za pomoc
polecenia exepath (lub exepath+ w przypadku dodawania cie ek). 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, mo na zastosowa poni sze polecenie ustawiaj ce poprawnie
cie k plików wykonywalnych (nast pnie nale y u y polecenia .reload,
aby nowa cie ka zosta a 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 przyj to za o enie, e
plik mscordacwks.dll jest dost pny w jednym lub innym miejscu (na serwe-
rze symboli publicznych lub na komputerze lokalnym). Je li nie mo na
znale wersji pliku DLL, która zosta a u yta przy generowaniu pliku
zrzutu, najlepiej jest poprosi osob , która to zrobi a, o przes anie odpo-
wiedniej wersji pliku mscordacwks.dll. Po otrzymaniu pliku mo na go
za adowa , stosuj c techniki opisane powy ej.
Okre lenie w a ciwej wersji pliku mscordacwks.dll bywa czasami trudne
i uzyskanie bieg o ci w jej znajdowaniu wymaga troch czasu i przeprowa-
dzenia kilku prób. Po za adowaniu tego pliku rozszerzenie SOS b dzie
w pe ni funkcjonalne i b dzie mo na ponowi diagnozowanie.
432 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Analizowanie plików zrzutu
 nieobsłużone wyjątki .NET
W poprzednim podrozdziale wygenerowali my plik zrzutu awaryjnej apli-
kacji i naszym zadaniem jest znalezienie przyczyny problemów, maj c do
dyspozycji tylko ten plik.
Aby móc wykorzysta ten plik, musimy o tym poinformowa debuger. Do
tego s u y prze cznik -z:
C:> ntsd  z C:\08dumpfile.dmp
Pierwsz wa n informacj zwrócon przez debuger jest wyj tek 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 powy szych danych wynika, e badany przez nas plik zosta wygene-
rowany z powodu wyst pienia wyj tku CLR. Kolejnym krokiem b dzie
dok adne przyjrzenie si temu wyj tkowi.
0:000> kb
k
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:
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:
HResult: 80070057
US UGA RAPORTOWANIA B DÓW 433
S dz c po tym wyj tku, mo emy wywnioskowa , e aplikacja uleg a
awarii z powodu nieprawid owej warto ci (NULL) argumentu przekazanego
w wywo aniu metody. Na podstawie dostarczonego zrzutu stosu wywo a
mo emy przeprowadzi prosty przegl d kodu, dzi ki czemu uda si znale
problem. Mimo i powy szy przyk ad jest bardzo prosty, stanowi on dowód,
e diagnozowanie aplikacji zarz dzanych po wyst pieniu awarii jest jak naj-
bardziej mo liwe. W procesie tym mo na korzysta ze wszystkich bardzo
pomocnych polece rozszerze debugera SOS i SOSEX.
Usługa raportowania błędów
Ka dy u ytkownik 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 Us uga rapor-
towania b dów (ang. Windows Error Reporting  WER). Mo na si w nim
zdecydowa na wys anie raportu o b dzie firmie Microsoft. Je li u ytkownik
wy le taki raport, zostanie on przes any zabezpieczonym kana em (HTTPS)
do bazy danych Microsoftu, w której zostanie przydzielony do odpowiedniej
kategorii i zapisany w celu pó niejszego przeanalizowania. Jak nietrudno si
domy li , w raporcie tym znajduje si równie plik zrzutu, na podstawie któ-
rego programi ci mog spróbowa znale przyczyn zaistnia ego problemu.
Z Us ugi raportowania b dów mog korzysta aplikacje ró nych produ-
centów, nie tylko firmy Microsoft. Raportowaniu podlega ka dy proces sys-
temu Windows wywo uj cy jak awari . Aby jednak uzyska dost p do ra-
portów zg aszanych przez nasze aplikacje, musimy najpierw zarejestrowa
si w Us udze raportowania b dów. W tym podrozdziale dowiesz si , jak
dzia a us uga WER, co jest w jej ramach wysy ane, jak zarejestrowa si
w tej us udze oraz jak pobiera z niej raporty.
434 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Architektura usługi Windows Error Reporting
Windows Error Reporting to us uga gromadzenia danych dotycz cych awarii
umo liwiaj ca firmie Microsoft i innym producentom oprogramowania atwe
uzyskanie dost pu do informacji zwi zanych z ich programami. Ogólny
schemat dzia ania us ugi WER zosta przedstawiony na rysunku 8.3.
Rysunek 8.3. Schemat usługi WER
US UGA RAPORTOWANIA B DÓW 435
Dwa najwa niejsze elementy powy szego schematu to:
Komputery, na których dzia aj aplikacje sprawiaj ce problemy i które
wysy aj raporty do WER.
Producent oprogramowania monitoruj cy raporty na temat jego apli-
kacji przysy ane do WER.
Wyobra my sobie, e gdzie na wiecie znajduje si komputer, na któ-
rym dzia a jaka aplikacja (proces X na rysunku 8.3) wyprodukowana przez
firm ADND. Program ten ulega awarii, co powoduje wy wietlenie okna
dialogowego modu u Dr Watson, w którym u ytkownik zgadza si na
wys anie raportu o b dzie poprzez bezpieczny kana HTTPS do us ugi WER.
Us uga ta segreguje przychodz ce raporty i zapisuje informacje o b dach
w odpowiednich kategoriach. U ytkownik z firmy ADND wysy a zapytania
do bazy danych WER na temat aplikacji swojej firmy i w odpowiedzi uzy-
skuje informacje. Teraz firma ADND mo e rozwi za zaistnia y problem
i zdefiniowa odpowied , która zostanie przedstawiona u ytkownikowi apli-
kacji przez modu Dr Watson przy nast pnej awarii. Reakcja ta mo e by
przekazana w formie poprawki do programu lub jakiej pomocnej informacji.
Jak wida , us uga WER to bardzo pomocny system umo liwiaj cy bez-
pieczne gromadzenie informacji o b dach i wykorzystanie ich przez pro-
ducentów oprogramowania do badania jako ci ich aplikacji. Ponadto
producenci mog publikowa odpowiedzi na poznane problemy i dodawa je
do systemu reagowania WER, dzi ki czemu klienci bez problemu uzy-
skuj poprawki, gdy s one dost pne.
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 zró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 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
W dalszej cz ci tego podrozdzia u do zilustrowania procesu korzystania
z us ugi WER b dzie wykorzystywana aplikacja 08SimpleExc.exe z wcze-
niejszego podrozdzia u.
Pierwsz czynno ci , jak nale y wykona , aby móc korzysta z us ugi
WER, jest rejestracja w tej us udze.
Rejestrowanie się w usłudze WER
Aby sta si u ytkownikiem us ugi WER (tzn. móc pobiera z niej raporty),
nale y si zarejestrowa . Proces rejestracji dzieli si na dwa etapy:
Utworzenie konta u ytkownika.
Utworzenie konta firmowego.
Proces rejestracji mo na rozpocz na poni szej stronie:
https://winqual.microsoft.com/SignUp/
Po wpisaniu powy szego adresu w oknie przegl darki zostanie wy wie-
tlona strona widoczna na rysunku 8.4.
Rysunek 8.4. Pierwsza strona procesu rejestracji w usłudze WER
Aby utworzy konto u ytkownika, nale y mie konto firmowe. Je li masz
ju konto firmowe, mo esz 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 utworzyli my jeszcze
konta firmowego, przechodzimy do sekcji Create a Company Account
(rysunek 8.5).
US UGA RAPORTOWANIA B DÓW 437
Rysunek 8.5. Tworzenie konta firmowego
Tworzenie konta firmowego sk ada si z trzech etapów:
1. Utworzenie podpisanego pliku Winqual.exe. Ka da firma, która chce
za o y konto w us udze WER, musi dokona autoidentyfikacji. Do
tego celu jest wykorzystywany cyfrowy certyfikat podpisywania kodu
Class 3 lub certyfikat instytucji certyfikuj cej, który mo na kupi
w firmie VeriSign (www.verisign.com/code-signing/content-signing-
certificates/winqual-partners/index.html). Po otrzymaniu certyfikatu
nale y nim podpisa plik Winqual.exe i wys a do firmy Microsoft do
weryfikacji.
2. Dostarczenie informacji rozliczeniowych. Wi kszo funkcji us ugi
WER jest bezp atna, ale za niektóre nowe udoskonalenia trzeba za-
p aci . Dlatego firma Microsoft wymaga podania informacji rozlicze-
niowych.
3. Podanie informacji kontaktowych poprzez utworzenie konta u ytkow-
nika, za pomoc którego mo na uzyska dost p do konta firmowego.
438 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Zaczniemy od punktu 1 (podpisywania pliku Winqual.exe). Jak wspomi-
na em, firma Microsoft ze wzgl dów bezpiecze stwa wymaga, aby ka da
firma rejestruj ca si w us udze WER dokona a autoidentyfikacji za pomoc
podpisu kodu ród owego Class 3 lub certyfikatu wydanego przez instytucj
certyfikuj c . W dalszej cz ci tego rozdzia u przyj em, e mamy ju certy-
fikat VeriSign. Najpierw musimy pobra plik do podpisania z serwera Micro-
softu pod nast puj cym adresem:
https://winqual.microsoft.com/signup/winqual.exe
Zapisz ten plik na dysku twardym w folderze C:\Sign. Teraz potrzebne
b d narz dzia do podpisywania kodu. Narz dzia te znajduj si pod na-
st puj cym 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 zawieraj cy instrukcje podpisywania kodu pliku
binarnego za pomoc narz dzi do podpisywania kodu. Ponadto plik
ten zawiera has o, którego nale y u y przy wypakowywaniu pliku
signcode.exe, równie znajduj cego si w tym archiwum ZIP.
signcode.exe  aplikacja, za pomoc której podpiszemy plik Wi-
nqual.exe.
Wypakuj plik signcode.exe (pami taj o podaniu has a 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 nast puj ce 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 zast p nazwami w asnych plików
certyfikatu i klucza prywatnego. Podczas procesu podpisywania trzeba wpro-
wadzi has o klucza prywatnego. Podaj has o dostarczone przez VeriSign
podczas procesu nabywania certyfikatu. Je li podpisywanie powiedzie si , zo-
stanie wy wietlony stosowny komunikat. Je li wyst pi jakie b dy, sprawd ,
czy poprawnie zosta y wpisane nazwy plików certyfikatu i klucza prywatne-
go oraz czy znajduj si one w tym samym folderze co plik signcode.exe.
US UGA RAPORTOWANIA B DÓW 439
Nast pnym etapem procesu rejestracji jest wys anie podpisanego pliku
Winqual.exe do firmy Microsoft w celu weryfikacji. Na stronie widocznej na
rysunku 8.5 kliknij przycisk Next. Na nast pnej stronie (rysunek 8.6) znaj-
duje si formularz, za pomoc którego mo na wys a plik do firmy Microsoft.
Rysunek 8.6. Wysyłanie podpisanego pliku Winqual.exe
Aby wys a plik, nale y wpisa w cie k do niego i klikn przycisk
Next. Po tym zostanie wy wietlona kolejna strona, na której nale y poda
informacje rozliczeniowe (rysunek 8.7).
Rysunek 8.7. Strona informacji rozliczeniowych
440 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Jak wspomina em, wi kszo funkcji us ugi WER jest bezp atna, ale za
niektóre firma Microsoft pobiera op aty. Informacje rozliczeniowe zostan
wykorzystane, je li u ytkownik skorzysta z której z p atnych funkcji.
Wprowad informacje rozliczeniowe swojej firmy (pola oznaczone dru-
kiem pogrubionym nale y obowi zkowo wype ni ) 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 b d s u y y pó niej do
logowania do konta w us udze. Wype nij wszystkie pola formularza, w szcze-
gólno ci zwró uwag na wymagania dotycz ce hase opisane na dole strony.
Utworzenie silnego has a jest konieczne, aby informacje dotycz ce b dów
firm by y bezpieczne.
US UGA RAPORTOWANIA B DÓW 441
Po wype nieniu formularza kliknij przycisk Next, aby przej do strony
z informacj o pomy lnym zako czeniu procesu tworzenia nowego konta
(rysunek 8.9).
Rysunek 8.9. Pomyślne zakończenie procesu tworzenia nowego konta
Ostatnie czynno ci, jakie nale y wykona przed uzyskaniem dost pu do
WER, to ustalenie praw dost pu i podpisanie umów. Zaczniemy od praw
dost pu. Kliknij cze Manage Permissions, aby przej na stron zarz dzania
prawami dost pu widoczn na rysunku 8.10.
Rysunek 8.10. Zarządzanie prawami dostępu
442 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
W razie potrzeby zaznacz pola wyboru Sign Master Legal Agreements,
View WER Data oraz Download WER Data i kliknij przycisk Update. Warto
zauwa y , e z jednym kontem firmowym WER mo e by powi zanych
wiele kont u ytkownika. Jest to przydatne, gdy potrzebne s konta o ró nych
poziomach dost pu do danych (których okre lanie przedstawiono na rysunku
8.10). Np. jeden u ytkownik mo e mie dost p do raportów o b dach, a inny
mo e mie mo liwo podpisywania umów.
Teraz wrócimy do strony widocznej na rysunku 8.9, aby zako czy pro-
ces poprzez podpisanie umowy, która jest wymagana przez firm Microsoft.
Kliknij cze Sign Legal Agreements, co spowoduje przej cie na stron umowy
dotycz cej korzystania z us ugi Windows Error Reporting. Przeczytaj uwa -
nie wszystkie informacje i je li akceptujesz warunki, wprowad informacje
na dole ostatniej strony, aby podpisa umow . Je li chcesz zachowa dla
siebie kopi umowy, mo esz wprowadzi w formularzu dane swojej firmy
i j wydrukowa .
Na tym ko czy si proces rejestracji. Od tej pory mo esz korzysta
z wszystkich funkcji us ugi WER, loguj c si do swojego konta pod adresem
https://winqual.microsoft.com/default.aspx.
Poruszanie się po witrynie usługi WER
Po zalogowaniu si w us udze WER na stronie wy wietlane s najnowsze
wiadomo ci dotycz ce Winqual. Po lewej stronie znajduje si kolumna za-
wieraj ca cza do ró nych cz ci witryny. Trzy najwa niejsze cz ci tej
kolumny to:
Windows Logo Programs.
Windows Error Reports.
Driver Distribution Center.
My zajmiemy si tylko sekcj Windows Error Reports, a mówi c dok ad-
niej, cz ci Software us ugi WER. Opcje dost pne w menu Software przed-
stawiono na rysunku 8.11.
Opcja Product Rollups w kategorii Event Views s u y do wy wietlania
raportów o b dach, posegregowanych wed ug nazwy i wersji produktu.
Taka przyk adowa strona jest przedstawiona na rysunku 8.12.
Na powy szym rysunku wida , e zarejestrowano tylko jeden produkt
 Advanced .NET Debugging. Produkt ten ma dwie kolumny, dzi ki
którym mo na uzyska bardziej szczegó owe informacje na temat zda-
rze (awarii i innych), które mog y zosta zg oszone:
US UGA RAPORTOWANIA B DÓW 443
Rysunek 8.11. Opcje menu Software usługi WER
Rysunek 8.12. Przykładowa strona Product Rollup
Eventlist  klikni cie tej ikony powoduje przej cie na stron za-
wieraj c list wszystkich zdarze , które mia y miejsce w aplikacji.
Hotlist  klikni cie tej ikony powoduje przej cie na stron z infor-
macjami na temat najcz stszych problemów w aplikacji z ostatnich
90 dni.
Kolejnym elementem menu jest kategoria Administration. Znajduj si
w niej nast puj ce opcje:
Manage Mappings  umo liwia powi zanie plików binarnych z pro-
duktami, dzi ki czemu us uga WER rozpoznaje, które pliki nale do
poszczególnych produktów. Sposób tworzenia takiego powi zania
poka nieco pó niej.
444 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Manage Responses  umo liwia zdefiniowanie odpowiedzi na cz sto
zg aszane przez u ytkowników problemy. W istocie oznacza to utwo-
rzenie odpowiedzi zwrotnej, która mo e zawiera wszystko: od zwy-
k ych informacji po atki. Sposób definiowania odpowiedzi równie
poka nieco dalej.
Znamy ju ogólny rozk ad witryny WER. Teraz przejdziemy do wi zania
plików binarnych z produktami, aby poinformowa us ug , które pliki nale
do poszczególnych produktów.
Wiązanie plików binarnych z produktami
Po zalogowaniu si na koncie nale y tak ustawi konfiguracj , aby wszystkie
informacje o b dach naszych aplikacji by y przesy ane na nasze firmowe
konto. Gdy do us ugi WER dotrze raport o b dzie, musi ona przyporz d-
kowa go w a ciwej firmie. Najwa niejszym elementem tego procesu jest
nazwa aplikacji. Dlatego firmy rejestruj ce si w us udze WER musz
poda w niej nazwy wszystkich swoich produktów (w cznie z wszystkimi
plikami binarnymi). Informacje te s nast pnie przekazywane do witryny
WER w odpowiednio sformatowanym pliku XML. Plików tych nie kompi-
luje si samodzielnie, tylko u ywa si do tego narz dzia WER o nazwie
Microsoft Product Feedback Mapping Tool. Narz dzie to mo na pobra pod
nast puj cym 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
wy wietlona pierwsza strona kreatora, który poprowadzi Ci przez proces
wi zania (rysunek 8.13).
Proces tworzenia powi zania plików w us udze WER zilustruj na
przyk adzie znanej nam ju aplikacji 08SimpleExc.exe. Zaznacz pole wy-
boru Create a new mapping file i kliknij przycisk Next. Na rysunku 8.14
pokazano nast pn stron kreatora  o nazwie Gathering Product Mapping
Information.
Poni ej znajduje si opis opcji dost pnych na tej stronie. Nale y pami ta ,
aby przed przej ciem dalej wprowadzi takie same informacje jak na rysunku.
Product file(s) directory path  okre la cie k do katalogu z plikami
binarnymi aplikacji.
US UGA RAPORTOWANIA B DÓW 445
Rysunek 8.13. Narzędzie Microsoft Product Feedback Mapping Tool
Rysunek 8.14. Strona Gathering Product Mapping Information
Product Name  okre la nazw produktu, z którym maj zosta
zwi zane pliki binarne. Nazwa ta powinna by atwa do rozpoznania
dla u ytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.
446 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Product Version  okre la wersj produktu, z którym maj zosta
zwi zane pliki binarne. Warto ta powinna by atwa do rozpozna-
nia dla u ytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.
Po wprowadzeniu wszystkich informacji w tym i kolejnym oknie kliknij
przycisk Next. Nast pnie kreator za da podania nazwy pliku wi zania, który
zostanie niebawem wygenerowany. Wprowad nast puj c cie k i kliknij
przycisk Next:
C:\testmap.xml
Ostatni etap procesu, polegaj cy na wys aniu pliku wi za do witryny
WER, jest przedstawiony na rysunku 8.15.
Rysunek 8.15. Wysyłanie pliku wiązań do usługi WER
Zaznacz znajduj ce si na tej stronie kreatora pole wyboru i kliknij przy-
cisk Finish. Zostanie uruchomiona przegl darka internetowa z wy wietlon
stron wysy ania pliku (rysunek 8.16).
Na tej stronie wprowad cie k do utworzonego przed chwil pliku
wi za i kliknij przycisk Submit. Po pomy lnym wys aniu pliku proces wi za-
nia plików z produktem jest zako czony. Je li masz wi cej produktów, mu-
sisz powtórzy wszystkie opisane czynno ci dla ka dego z nich osobno.
US UGA RAPORTOWANIA B DÓW 447
Rysunek 8.16. Strona wysyłania pliku wiązań
Wracamy do strony g ównej us ugi WER. Aby rozporz dza swoimi
powi zaniami plików z produktami, nale y po lewej stronie wybra opcj
Manage Mappings z menu Software. Mo na zarówno wybra Product and
File Mappings, jak i wys a plik wi za . Np. efekt wybrania cza File Map-
ping po wys aniu pliku wi za przedstawia rysunek 8.17.
Rysunek 8.17. Wiązania plików w usłudze WER
448 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Na powy szym rysunku wida , e mamy kilka wi za plików, z których
ka de ma w asny zestaw atrybutów (np. data cza i powi zania). Dodatkowo
wy wietlone s informacje administracyjne, np. identyfikator i adres e-mail
osoby, która utworzy a dane wi zanie.
Maj c wi zania plików z produktem, mo emy przej do funkcji WER
zwi zanych z generowaniem raportów. Nauczymy si generowa raporty
z informacji otrzymanych od u ytkowników oraz szczegó owo analizowa te
raporty (np. zrzuty awaryjne).
Wysyłanie zapytań do usługi WER
Mamy ju konto w us udze WER oraz powi zali my plik binarny 08Simple
Exc.exe z produktem. Czas zatem na zapoznanie si z mechanizmem pobie-
rania z WER informacji na temat zg oszonych b dów w aplikacji. Urucho-
mimy nasz program klika razy i naka emy modu owi Dr Watson wys anie
do witryny WER informacji o awariach. Nale y pami ta , e od wys ania
raportu do jego pojawienia si w WER musi up yn nieco czasu.
Gdy wys ane raporty b d ju dost pne, na stronie Product Rollup zo-
stanie wy wietlona 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 wy wietlaj ce wszystkie zdarzenia, które wyst -
pi y w konkretnym produkcie, oraz b dy, które powtarza y si najcz ciej
w ci gu ostatnich 90 dni. Lista Hotlist jest znakomitym sposobem na ziden-
tyfikowanie najwa niejszych problemów z aplikacj . Na rysunku 8.19 znaj-
duje si przyk adowa strona listy zdarze .
US UGA RAPORTOWANIA 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 zosta o
zg oszone tylko jedno zdarzenie, ale za to dwukrotnie. W tabeli znajduje si
równie informacja o tym, jakiego rodzaju zdarzenie spowodowa o wygene-
rowanie danego raportu. W naszym przypadku jest to typ CLR20 Managed
Crash. Oznacza to, e zdarzenie mia o miejsce z powodu awarii w aplikacji
zarz dzanej wykorzystuj cej CLR 2.0. Klikaj c identyfikator zdarzenia, mo na
wy wietli szczegó owe informacje na jego temat. Strona szczegó ów zda-
rzenia jest podzielona na trzy cz ci:
Event Signature  poniewa z ka dym produktem mo e by zwi -
zanych wiele zdarze , ka de zdarzenie musi mie niepowtarzalny
identyfikator. Sk adniki takiego identyfikatora, zapewniaj ce jego
niepowtarzalno , s nast puj ce: nazwa i wersja aplikacji, nazwa
i wersja modu u, miejsce (przesuni cie) w module, który spowodo-
wa wyst pienie zdarzenia. Jak wida na rysunku 8.20, w module
08SimpleExc.exe awari wywo a o miejsce o przesuni ciu 4734.
Event Time Trending Details  wykres znajduj cy si w tej sekcji
przedstawia czasowy przebieg wyst powania zdarzenia. Na rysunku
8.20 wida , e nasze zdarzenie wyst pi o 16 marca, a pó niej cz sto-
tliwo jego wyst powania mala a.
Platform Details  zawiera szczegó owe informacje dotycz ce kon-
kretnego zdarzenia, np. system operacyjny i j zyk. Informacje z tej
sekcji s bezcenne przy identyfikowaniu problemów wyst puj cych
tylko w okre lonych konfiguracjach i umo liwiaj wysnucie wnio-
sków, e np. problem zdarza si tylko w angielskich wersjach j zy-
kowych programu.
450 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Rysunek 8.20. Szczegóły zdarzenia modułu 08SimpleExc.exe
Na rysunku 8.20 widoczne s tylko dane dotycz ce 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 mo na przej do listy dost pnych plików .cab
okre lonego zdarzenia poprzez klikni cie ikony Cab Status albo zmieni za-
sad gromadzenia danych dla wybranego zdarzenia, klikaj c ikon Data
Request. Na rysunku 8.22 przedstawiono okno zasady gromadzenia danych.
US UGA RAPORTOWANIA B DÓW 451
Rysunek 8.22. Zasada gromadzenia danych
Pami taj, gdy w aplikacji wyst pi awaria, komputer, na którym to si sta o,
czy si z us ug WER w celu sprawdzenia ustawionej zasady gromadzenia
danych. Je li zasada zosta a zmieniona i wymaga ponownego wys ania, kom-
puter klienta tworzy nowy plik .cab zgodnie z zasad i wysy a go do WER.
W oknie zasady gromadzenia danych mo na okre li , jakie dodatkowe in-
formacje maj by zbierane w tym procesie. Oprócz informacji systemowych
mo na pobra dane sterty oraz dodatkowe pliki okre lone za pomoc ze-
stawu predefiniowanych zmiennych rodowiskowych. Ponadto mo na okre-
li liczb dodatkowych plików .cab, które maj zosta zebrane.
Ostatnia wa na kolumna tabeli przedstawionej na rysunku 8.19 ma na-
zw Cabs. Klikni cie ikony powoduje wy wietlenie listy dost pnych dla
zdarzenia plików .cab. Plik .cab to zbiór plików reprezentuj cych informacje
o zdarzeniu (jeden plik .cab przypada na jedno wys anie) wysy ane przez
u ytkowników, którzy zdecyduj si wys a raport do firmy Microsoft.
Jednym z najwa niejszych plików takiego zbioru jest zrzut wykonany
w chwili wyst pienia awarii. Plik ten mo na wykorzysta do zdiagnozowa-
nia problemu poawaryjnie za pomoc technik opisanych wcze niej.
452 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Wiemy ju , jakie informacje s udost pniane poprzez us ug WER
 wszystko od ogólnego przegl du zdarze po szczegó owe dane oparte na
informacjach przes anych przez u ytkowników. Teraz zwrócimy nasz uwag
na ostatni etap procesu  udzielanie odpowiedzi u ytkownikom po rozwi -
zaniu ich problemu.
Odpowiadanie na problemy
Aby odpowiedzie u ytkownikom na okre lone zdarzenie, nale y przej na
jego stron Event Details. Je li jeszcze nie zosta a zarejestrowana dla niego
adna odpowied , na górze strony b d znajdowa y si opcje s u ce 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 umo liwia tworzenie odpowiedzi,
które zostan przedstawione wszystkim u ytkownikom maj cym okre-
lon wersj programu. Taka odpowied mo e mie posta aktualizacji
(np. nowej wersji).
Module  poziom modu u umo liwia tworzenie odpowiedzi prze-
znaczonych dla u ytkowników u ywaj cych okre lonej wersji naszego
modu u. Taka odpowied mo e mie posta aktualizacji (np. nowej
wersji).
My wybierzemy opcj rejestracji odpowiedzi na pojedyncze zdarzenie.
Kliknij pole wyboru Event, a nast pnie kliknij przycisk Register Response.
Teraz trzeba poda szczegó y odpowiedzi na zdarzenie. Do zarejestrowania
odpowiedzi potrzebne s nast puj ce informacje:
US UGA RAPORTOWANIA B DÓW 453
Products  nazwa produktu.
URL of Solution/Info  adres URL odpowiedzi. Adres ten powinien
prowadzi na stron zawieraj c wszystkie informacje wymagane do
udzielenia odpowiedzi.
Response Template  szablon odpowiedzi. Mo na wykorzysta go-
towy szablon albo zdefiniowa w asny. Przyk adowe gotowe szablony
to: System Does Not Meet Minimum Requirements (system nie spe nia
podstawowych wymaga ), Product Upgrade (uaktualnienie produktu)
czy Upgrade to New Version (uaktualnienie do nowej wersji). Zale nie
od wybranej z tej listy opcji wygl d pola podgl du mo e si zmienia .
Response Template Preview  podgl d informacji, które zostan
opublikowane w odpowiedzi.
Additional Information  dodatkowe informacje, które chcieliby my
doda do odpowiedzi.
Po wprowadzeniu wszystkich informacji kontynuujemy rejestracj
odpowiedzi, przechodz c na stron Response Management (zarz dzanie
odpowiedziami), na której znajduje si lista wszystkich odpowiedzi, jakie
zarejestrowali my do tej pory. Nale y zauwa y , e nowo zarejestrowana
odpowied nie jest publikowana natychmiast, lecz najpierw przechodzi przez
proces zatwierdzania, który trwa kilka dni. Na stronie Response Management
mo na równie zarz dza wszystkimi wcze niej utworzonymi odpowiedziami.
Mo na obejrze ich szczegó y, dokona w nich zmian oraz usun te, które
s ju nieaktualne.
Jak nasza odpowied zostanie przedstawiona u ytkownikowi? Nast pnym
razem, gdy nast pi awaria programu, dla której zdefiniowano odpowied ,
zostanie wy wietlone 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 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Je li u ytkownik kliknie przycisk Zamknij program, zostanie wy wietlone
powiadomienie, e dla problemu, który wyst pi , jest dost pne rozwi zanie.
Klikni cie komunikatu spowoduje wy wietlenie okna dialogowego zawiera-
j cego tekst rozwi zania, jak na rysunku 8.25.
Rysunek 8.25. Okno dialogowe zawierające treść rozwiązania problemu z aplikacją
W tym przypadku u ytkownik mo e klikn cze The High-tech Avenue,
które przeniesie go na stron zawieraj c szczegó owy opis rozwi zania
problemu.
Raportowanie i subskrypcje
Dwie nowe funkcje dodane w us udze WER to raportowanie i subskrypcje.
Subskrypcje umo liwiaj otrzymywanie powiadomie dotycz cych okre lo-
nych zdarze . Aby uzyska dost p do tej funkcji, nale y w menu Software
wybra element My Subscriptions. Na rysunku 8.26 przedstawione zosta y
ustawienia dost pne w ramach tej funkcji.
Aby aktywowa wybran subskrypcj , nale y zaznaczy jej pole wy-
boru. Dodatkowo mo na okre li dat (a w niektórych przypadkach tak e
cz stotliwo ) wysy ania 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 ksi ki dost pny by tylko jeden raport  o nazwie Response Satis-
faction, który przedstawia ogóln jako odpowiedzi oraz liczb wy wie-
tle i wys anych przez u ytkowników wyników ankiety. Funkcja rapor-
towania jest stosunkowo nowa i w przysz o ci nale y si spodziewa
powi kszenia liczby raportów.
US UGA RAPORTOWANIA B DÓW 455
Rysunek 8.26. Opcje subskrypcji
Jak wida , WER to bardzo pomocna us uga umo liwiaj ca monitorowanie
dzia ania aplikacji na komputerach rzeczywistych u ytkowników. Mo liwo
wysy ania przez u ytkowników informacji o awariach programu to niezwykle
cenna technologia, która znacz co przyczynia si do zmniejszenia proble-
mów powodowanych przez b dy w programach.
Dostęp do usługi WER z poziomu programu
Us uga Windows Error Reporting jest dla firm znakomitym narz dziem do
monitorowania ich aplikacji na komputerach u ytkowników, umo liwiaj -
cym podejmowanie rodków zaradczych w razie wyst pienia problemów.
Wystarczy utworzy konto i zarejestrowa swoje produkty, wi c z nimi
pliki binarne, aby uzyska dost p do obszernych baz danych na temat b dów
wyst puj cych w aplikacjach dzia aj cych w realnych warunkach. Jedn
z wad tej us ugi jest konieczno regularnego logowania si w witrynie w celu
sprawdzenia, czy pojawi y si nowe informacje o zdarzeniach. Je li co jest,
mo na pobra odpowiadaj cy wybranemu zdarzeniu plik .cab, aby dok ad-
niej zbada problem. Znacznie lepszym sposobem na monitorowanie
aplikacji poprzez WER jest jednak skorzystanie z udost pnianego przez t
us ug API. API us ug sieciowych umo liwiaj firmom tworzenie w asnych
456 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
systemów monitoruj cych, które automatycznie pobieraj dane o zdarze-
niach z serwera. Warstw dost pu do swoich us ug sieciowych zespó WER
opublikowa w serwisie CodePlex (http://www.codeplex.com/). Mo na tam
dodatkowo znale kilka przyk adowych projektów (m.in. gad et dla syste-
mu Windows Vista pobieraj cy informacje z WER). Ponadto opublikowany
zosta równie zestaw klienta (http://wer.codeplex.com/Release/Project
Releases.aspx?ReleaseId=12825) udost pniaj cy model obiektowy WER,
co znacznie u atwia prac nad w asnymi aplikacjami monitoruj cymi. Rysu-
nek 8.27 przedstawia ogólny schemat dzia ania us ugi 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 u ywa si do tego logowania,
to dane u ytkownika z uprawnieniami dost pu do konta (np. g ównego ad-
ministratora). Je li logowanie si powiedzie, obiekt logowania najcz ciej
jest zapisywany w pami ci podr cznej aplikacji klienckiej i wykorzystywany
we wszystkich innych dzia aniach WER. Nast pnie aplikacja mo e przeliczy
produkty dost pne na koncie (wcze niej poddane wi zaniu za pomoc na-
US UGA RAPORTOWANIA B DÓW 457
rz dzia Product Feedback Mapping Tool) i wybra te, które nas interesuj .
Do reprezentowania produktów s u y klasa Product. Ka dy egzemplarz
klasy Product zawiera zbiór aplikacji odpowiadaj cych ka demu plikowi
binarnemu powi zanemu w procesie wi zania. Aplikacj reprezentuje
klasa ApplicationFile, która umo liwia uzyskanie szczegó owych in-
formacji o aplikacji. Podobnie jak klasa Product gromadzi zestaw aplikacji,
ka da aplikacja gromadzi zestaw zdarze (reprezentowanych przez klas
Event). Ka dy taki obiekt zdarzenia zawiera szczegó owe informacje, jak
np. typ zdarzenia i zwi zane z nim pliki .cab. Klient mo e wykorzysta te
informacje na ró ne sposoby, np. zapisa je w bazie danych albo doda do
systemu automatycznego ledzenia b dów.
Technik integrowania w asnego klienta z us ug WER przedstawi na
przyk adowej aplikacji konsolowej, która b dzie pobiera a szczegó y okre-
lonego zdarzenia. Kod ród owy 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 u ytkownika: ");
userName = Console.ReadLine();
Console.Write("Podaj has o: ");
password = Console.ReadLine();
Console.WriteLine("Logowanie do WER...");
login=WerLogin(userName, password);
Console.WriteLine("Logowanie powiod o si ");
458 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
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 wyst pie 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)
{
US UGA RAPORTOWANIA 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ód owy i plik binarny tego programu znajduj si w nast puj cych
lokalizacjach:
Kod ród owy: C:\ADND\Chapter8\WerConsole
Plik binarny: C:\ADNDBin\08WerConsole.exe
Na potrzeby tego przyk adu 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
mo na znale w witrynie CodePlex pod nast puj cym adresem:
http://wer.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12825
Jak wida na listingu 8.2, jest to prosta aplikacja wiersza polece prosz ca
na pocz tku u ytkownika o podanie nast puj cych informacji:
Nazwa u ytkownika  nazwa u ytkownika potrzebna do zalogowania
si w us udze WER.
Has o  has o u ytkownika okre lonego wcze niej. Nale y zwróci
uwag , e wprowadzone has o b dzie widoczne w konsoli.
Po otrzymaniu nazwy u ytkownika i has a aplikacja przekazuje te infor-
macje jako parametry za pomoc metody Login. W przypadku powodzenia
metoda ta zwraca egzemplarz klasy Login reprezentuj cy now sesj WER.
Egzemplarz ten b dzie wykorzystywany w dalszej pracy. Po po czeniu si
z us ug WER aplikacja prosi o podanie dodatkowych informacji:
460 ROZDZIA 8. DEBUGOWANIE POAWARYJNE
Produkt  nazwa interesuj cego nas produktu.
Plik  interesuj cy nas plik aplikacji.
Identyfikator zdarzenia  identyfikator interesuj cego nas zdarzenia.
Miejsce do zapisywania plików .cab  miejsce, w którym maj zosta
zapisane pliki .cab zwi zane z okre lonym identyfikatorem zdarzenia.
Po uzyskaniu powy szych informacji klient czy si z us ug WER i
szuka zdarzenia. Robi to w nast puj cy sposób:
1. Szuka okre lonego produktu, przeszukuj c wszystkie produkty za-
rejestrowane przez firm (zwi zane z u ytkownikiem o okre lonej
nazwie).
2. Szuka okre lonego pliku aplikacji, przeszukuj c wszystkie pliki apli-
kacji zwi zane z produktem znalezionym w punkcie 1.
3. Szuka zdarzenia, przeszukuj c wszystkie zdarzenia zwi zane z plikiem
aplikacji znalezionym w punkcie 2.
4. Je li znajdzie zdarzenie, pobiera wszystkie zwi zane z nim pliki .cab.
Nale y zauwa y , e we wszystkich wymienionych wy ej operacjach,
w których potrzebne jest odwo anie do WER, potrzebny jest równie eg-
zemplarz logowania (tzn. ustalonej sesji) przekazywany jako parametr.
Zobaczmy przyk adow sesj dzia ania naszego klienta:
C:\ADNDBin>08WerConsole.exe
0
Enter user name: MarioH
Enter 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 mo e by nieco d ugi, je li do pobrania jest du o
plików zawieraj cych du e ilo ci informacji. W folderze na pliki .cab znaj-
duj si teraz nast puj ce pliki:
C:\ADNDBin>dir /B c:\Zone\cab
d
504156229-CLR20ManagedCrash-0605004230.cab
504156229-CLR20ManagedCrash-0605004408.cab
504156229-CLR20ManagedCrash-0605004551.cab
PODSUMOWANIE 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
Mo emy teraz wypakowa pobrane pliki .cab, za adowa do debugera
odpowiedni plik zrzutu i spróbowa znale przyczyn problemu za pomoc
technik debugowania poawaryjnego.
Programowy dost p do us ugi WER to niezwykle przydatna technologia
umo liwiaj ca firmom tworzenie w asnych systemów automatycznego mo-
nitorowania aplikacji, które mog bez problemu zintegrowa ze swoimi
systemami ledzenia b dów. Bez trudu mo na sobie wyobrazi us ug ,
która okresowo czy si z WER w celu pobrania do bazy danych nowych
informacji o b dach i która jest zintegrowana z firmowym systemem le-
dzenia b dów. Dzi ki temu programi ci s na bie co informowani o b -
dach i mog szybko na nie reagowa .
Podsumowanie
Debugowanie poawaryjne to jedna z najwa niejszych technik w pracy
in yniera oprogramowania. Po dostarczeniu programu do klientów bardzo
trudno jest rozwi zywa jakiekolwiek problemy, dlatego posiadanie wiedzy
i mo liwo szybkiego oraz precyzyjnego reagowania na b dy s warun-
kiem zminimalizowania k opotów po stronie klienta.
W tym rozdziale dowiedzieli my si , dlaczego czasami konieczne jest
zastosowanie technik debugowania poawaryjnego. Wiemy ju , jakie s po-
trzebne do tego informacje oraz jakie narz dzia s u do ich zbierania. Wiemy
równie , jak wykorzysta dane zgromadzone w debugerze, aby rozwi za
zaistnia y problem.
Szczegó owo zosta a opisana us uga Windows Error Reporting, która
umo liwia monitorowanie aplikacji w realnych zastosowaniach oraz udost p-
nia informacje o b dach (np. zrzuty awaryjne) zwi zanych z poszczególnymi
zdarzeniami i umo liwia zdefiniowanie reakcji na te b dy. Ponadto naj-
nowsze udoskonalenia us ugi WER pozwalaj na dost p do niej z poziomu
programów, dzi ki czemu mo na jeszcze lepiej zorganizowa proces kon-
serwacji programu.


Wyszukiwarka

Podobne podstrony:
MS Access 2000 PL Zaawansowane techniki programowania
Metody i techniki diagnostyczne w swietle?dan
MS Access 97 PL Zaawansowane techniki programowania
Zaawansowane techniki programowania 01 Składnia C
Biopsja jako technika diagnostyczna STOSOWANA W ROZPOZNAWANIU CHORÓB NEREK U PSÓW I KOTÓW
Podstawowe techniki diagnostyczne (okulistyka wet 05) D J Maggs
Zaawansowane techniki programowania 03 Szablony
Zaawansowane techniki programowania 04 Gniazda
Wykład 8 Elementy diagnostyki technicznej
Test diagnozujÄ…cy technikum klasa 2 grupa II

więcej podobnych podstron