Debugowanie NET Zaawansowane techniki diagnostyczne debnet

background image
background image

Idź do

• Spis treści
• Przykładowy rozdział

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacje

o nowościach

• Fragmenty książek

online

Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl

© Helion 1991–2010

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowany

katalog

Debugowanie .NET.
Zaawansowane techniki
diagnostyczne

Autor:

Mario Hewardt

Tłumaczenie: Łukasz Piwko
ISBN: 978-83-246-2721-9
Tytuł oryginału:

Advanced .NET Debugging

Format: 168×237, stron: 528

Sprawdź, jak rozwiązują problemy najlepsi specjaliści!

• Jak stworzyć niezawodny kod?
• Jak rozwiązywać problemy z synchronizacją wątków?
• Jak wykorzystać usługę raportowania błędów?

Czy znasz programistę, który nigdy w życiu nie użył debuggera? Dzisiejsze rozbudowane
i skomplikowane systemy informatyczne wymagają znakomitej znajomości zaawansowanych
narzędzi diagnostycznych. Bez nich wykrycie nawet najprostszego potknięcia mogłoby zająć długie
godziny, jeśli nie dni, a poświęcony czas wcale nie gwarantowałby sukcesu. Niestety, posługiwanie
się zaawansowanymi narzędziami wymaga równie zaawansowanej wiedzy. Jeśli nie masz pewności,
czy zgromadziłeś już wszystkie potrzebne Ci informacje, sięgnij po tę książkę – pozwoli to
błyskawicznie uzupełnić brakujące dane!

W pierwszej części książki będziesz mógł zapoznać się z podstawami programowania oraz
narzędziami wykorzystywanymi w codziennej pracy programisty. Poznasz między innymi metody
sterowania wykonywaniem programu, techniki inspekcji obiektowej, sposoby operowania na
wątkach oraz polecenia diagnostyczne platformy .NET. Część druga zawiera obszerny zakres
informacji dotyczących praktycznych aspektów diagnostyki oprogramowania. Dowiesz się, jak
wykrywać błędy w zarządzaniu stertą, jak rozwiązywać kłopoty z pamięcią oraz jak radzić sobie
z najbardziej skomplikowanymi problemami dotyczącymi wątków. Na samym końcu zapoznasz
się z zaawansowanymi zagadnieniami diagnostyki oprogramowania, takimi jak usługi raportowania
błędów, pliki obrazu oraz wyczerpujące opisy najlepszych narzędzi. W książce „Debugowanie .NET.
Zaawansowane techniki diagnostyczne” znajdziesz między innymi takie zagadnienia:

• Podstawowe informacje o dostępnych narzędziach
• Podstawy CLR
• Techniki diagnostyczne – sterowanie wykonaniem programu, punkty wstrzymania
• Inspekcja obiektowa oraz inspekcja kodu
• Dostępne polecenia wewnętrzne CLR oraz polecenia diagnostyczne
• Techniki odzyskiwania pamięci
• Rozwiązywanie problemów z synchronizacją wątków
• Metody diagnozowania wycieków interoperacyjności
• Wykorzystanie plików obrazu
• Generowanie zrzutów z wykorzystaniem debuggera
• Wykorzystanie usługi raportowania błędów
• Dostępne dodatkowe narzędzia, wspierające proces diagnostyczny

Twórz niezawodne oprogramowanie!

background image

7

S

PIS TREŚCI

Przedmowa

...........................................................................17

Wstęp

....................................................................................19

Podziękowania

.....................................................................29

O

autorze

..............................................................................31

C

ZĘŚĆ

I P

ODSTAWY

...................................................................................33

Rozdział 1. Podstawowe wiadomości o narzędziach ..............................35

Debugging Tools for Windows ................................................................................ 36
.NET 2.0 — Redistributable ........................................................................................ 37
.NET 2.0 — SDK .............................................................................................................. 38
SOS ..................................................................................................................................... 40
SOSEX ................................................................................................................................ 42
CLR Profiler ...................................................................................................................... 43
Mierniki wydajności ...................................................................................................... 46
Reflector for .NET ........................................................................................................... 47
PowerDbg ........................................................................................................................ 48
Managed Debugging Assistants .............................................................................. 50
Podsumowanie .............................................................................................................. 53

Rozdział 2. Podstawy CLR .......................................................................55

Przegląd wysokopoziomowy .................................................................................... 55
CLR i program ładujący Windows ............................................................................ 59

Ładowanie obrazów rodzimych ........................................................................ 60
Ładowanie zestawów .NET .................................................................................. 62

Domeny aplikacji ........................................................................................................... 66

Systemowa domena aplikacji ............................................................................ 69

Wspólna domena aplikacji ......................................................................................... 70

Domyślna domena aplikacji ............................................................................... 70

background image

8

S

P I S T R E  C I

Zestawy ............................................................................................................................ 70
Manifest zestawu .......................................................................................................... 72

Metadane typu ........................................................................................................ 74
Tabela bloku synchronizacji ............................................................................... 81
Uchwyt do typu ...................................................................................................... 85
Deskryptory metod ................................................................................................ 92
Moduły ....................................................................................................................... 93
Tokeny metadanych .............................................................................................. 96
EEClass ....................................................................................................................... 98

Podsumowanie ............................................................................................................100

Rozdział 3. Podstawowe techniki diagnostyczne .................................101

Debuger i proces docelowy debugera ................................................................101
Symbole .........................................................................................................................106
Sterowanie wykonywaniem programu ...............................................................109

Przerywanie wykonywania ...............................................................................109
Wznawianie wykonywania ................................................................................110
Przemierzanie kodu .............................................................................................112
Kończenie sesji diagnostycznej .......................................................................116

Ładowanie rozszerzeń kodu zarządzanego .......................................................116

Ładowanie rozszerzenia SOS ............................................................................118
Ładowanie rozszerzenia SOSEX .......................................................................120

Kontrolowanie procesu debugowania CLR .......................................................121
Ustawianie punktów wstrzymania ........................................................................121

Punkty wstrzymania na funkcjach skompilowanych
przez kompilator JIT ............................................................................................124
Punkty wstrzymania na funkcjach jeszcze nieskompilowanych ..........127
Punkty wstrzymania w zestawach prekompilowanych ..........................130
Punkty wstrzymania na metodach uogólnionych ....................................133

Inspekcja obiektowa ..................................................................................................134

Zrzucanie pamięci surowej ...............................................................................137
Zrzuty typów wartościowych ...........................................................................140
Zrzuty podstawowych typów referencyjnych ............................................146
Zrzuty tablic ...........................................................................................................147
Zrzuty obiektów na stosie .................................................................................153
Sprawdzanie rozmiarów obiektów ................................................................155
Zrzuty wyjątków ...................................................................................................156

Operacje na wątkach .................................................................................................161

Polecenie ClrStack ................................................................................................162
Polecenie Threads ................................................................................................165
Polecenie DumpStack .........................................................................................169
Polecenie EEStack ................................................................................................171
COMState ................................................................................................................171

Inspekcja kodu .............................................................................................................172

Dezasemblacja kodu ...........................................................................................172
Wydobywanie deskryptora metod z adresu kodu ....................................174
Wyświetlanie instrukcji języka pośredniego ...............................................175

background image

S

P I S T R E  C I

9

Polecenia wewnętrzne CLR .....................................................................................175

Sprawdzanie wersji CLR .....................................................................................176
Znajdowanie deskryptora metod po nazwie ..............................................176
Wykonywanie zrzutu bloku synchronizacji obiektu .................................177
Wykonywanie zrzutu tabeli metod obiektu ................................................177
Wykonywanie zrzutu informacji o stercie zarządzanej
i systemie odzyskiwania pamięci ....................................................................178

Polecenia diagnostyczne ..........................................................................................178

Znajdowanie domeny aplikacji obiektu .......................................................179
Informacje o procesie .........................................................................................179

Polecenia rozszerzenia SOSEX ................................................................................180

Rozszerzona obsługa punktów wstrzymania .............................................180
Zarządzane metadane ........................................................................................184
Dane stosu ..............................................................................................................185
Inspekcja obiektów ..............................................................................................187
Automatyczne wykrywanie zakleszczeń ......................................................188
Polecenia dotyczące sterty zarządzanej
i systemu odzyskiwania pamięci .....................................................................190

Zapisywanie zrzutów awaryjnych w plikach ......................................................192
Podsumowanie ............................................................................................................194

C

ZĘŚĆ

II D

IAGNOSTYKA STOSOWANA

............................................................... 195

Rozdział 4. Program ładujący zestawy ..................................................197

Informacje wstępne ...................................................................................................197

Tożsamość zestawu .............................................................................................198
Globalny bufor zestawów ..................................................................................202
Domyślny kontekst ładowania ........................................................................205
Kontekst „load-from” ..........................................................................................206
Kontekst „load-without” ....................................................................................207

Prosty błąd ładowania zestawu ..............................................................................207
Błąd kontekstu ładowania ........................................................................................214
Interoperacyjność i wyjątek DllNotFoundException ......................................222
Debugowanie LCG ......................................................................................................224
Podsumowanie ............................................................................................................229

Rozdział 5. Sterta zarządzana i odzyskiwanie pamięci .........................231

Architektura pamięci systemu Windows ............................................................232

Alokowanie pamięci ............................................................................................236

System odzyskiwania pamięci ................................................................................241

Pokolenia .................................................................................................................242
Korzenie ...................................................................................................................251
Finalizacja ................................................................................................................258

background image

10

S

P I S T R E  C I

Odzyskiwanie pamięci ........................................................................................267
Sterta obiektów dużych .....................................................................................269
Unieruchamianie obiektów ..............................................................................274
Tryby odzyskiwania pamięci .............................................................................280

Diagnozowanie uszkodzonej sterty zarządzanej .............................................281
Diagnozowanie fragmentacji sterty zarządzanej .............................................289
Diagnozowanie wyjątków braku pamięci ..........................................................298
Podsumowanie ............................................................................................................316

Rozdział 6. Synchronizacja ...................................................................317

Podstawy synchronizacji ..........................................................................................317
Mechanizmy synchronizacji wątków ....................................................................318

Zdarzenia ................................................................................................................323
Muteksy ...................................................................................................................325
Semafory .................................................................................................................326
Monitory ..................................................................................................................327
ReaderWriterLock(Slim) ......................................................................................328
Pula wątków ...........................................................................................................330

Wewnętrzne mechanizmy synchronizacji ..........................................................331

Nagłówek obiektu ................................................................................................331
Bloki synchronizacji .............................................................................................333
Blokady lekkie ........................................................................................................337

Scenariusze synchronizacji ......................................................................................341

Proste zakleszczenie ............................................................................................341
Wyjątki blokad porzuconych ............................................................................349
Anulowanie wątków ...........................................................................................354
Zawieszenie finalizatora .....................................................................................358

Podsumowanie ............................................................................................................366

Rozdział 7. Interoperacyjność ...............................................................369

P/Invoke .........................................................................................................................369
Interoperacyjność COM ............................................................................................376

Opakowanie wywoływane w czasie wykonywania ..................................377

Diagnozowanie wywołań P/Invoke ......................................................................382

Konwencje wywoływania ..................................................................................383
Delegaty ..................................................................................................................388

Diagnozowanie wycieków interoperacyjności .................................................396
Diagnozowanie finalizacji interoperacyjności COM ........................................402
Podsumowanie ............................................................................................................411

background image

S

P I S T R E  C I

11

C

ZĘŚĆ

III T

ECHNIKI ZAAWANSOWANE

............................................................... 413

Rozdział 8. Debugowanie poawaryjne ..................................................415

Pliki obrazu — podstawowe wiadomości ..........................................................416

Generowanie zrzutów przy użyciu debugera .............................................418
Generowanie plików zrzutu za pomocą narzędzia ADPlus ....................425
Diagnozowanie plików zrzutu .........................................................................427
Warstwa dostępu do danych ...........................................................................428
Analizowanie plików zrzutu — nieobsłużone wyjątki .NET ...................432

Usługa raportowania błędów .................................................................................433

Architektura usługi Windows Error Reporting ...........................................434

Podsumowanie ............................................................................................................461

Rozdział 9. Narzędzia dodatkowe .........................................................463

PowerDbg ......................................................................................................................463

Instalowanie narzędzia PowerDbg .................................................................464
Polecenie Analyze-PowerDbgThreads ..........................................................466
Polecenie Send-PowerDbgCommand ..........................................................467
Rozszerzanie PowerDbg ....................................................................................469

Visual Studio .................................................................................................................472

Integracja z SOS ....................................................................................................472
Debugowanie platformy .NET na poziomie kodu źródłowego ............476
Visual Studio 2010 ................................................................................................479

Program profilujący CLR ...........................................................................................484

Uruchamianie programu profilującego CLR ...............................................484
Widok podsumowania .......................................................................................486
Widoki histogramu ..............................................................................................488
Widoki wykresów .................................................................................................489

WinDbg i polecenie cmdtree ..................................................................................491
Podsumowanie .............................................................................................................493

Rozdział 10. CLR 4.0 ................................................................................495

Narzędzia .......................................................................................................................495

Debugging Tools for Windows ........................................................................496
Pakiet .NET 4.0 Redistributable ........................................................................496
SOS ............................................................................................................................496

Sterta zarządzana i odzyskiwanie pamięci .........................................................497

Rozszerzone narzędzia diagnostyczne .........................................................498
Odzyskiwanie pamięci w tle .............................................................................503

background image

12

S

P I S T R E  C I

Synchronizacja .............................................................................................................504

Pula wątków i zadań ............................................................................................505
Monitor ....................................................................................................................505
Bariera ......................................................................................................................506
Klasa CountdownEvent ......................................................................................507
Klasa ManualResetEventSlim ...........................................................................507
Klasa SemaphoreSlim .........................................................................................507
Klasy SpinWait i SpinLock ..................................................................................507

Interoperacyjność .......................................................................................................508
Debugowanie poawaryjne ......................................................................................509
Podsumowanie ............................................................................................................510

Skorowidz

...........................................................................511

background image

415

R O Z D Z I A  8

D

EBUGOWANIE POAWARYJNE

W poprzednich dwóch czciach ksiki poznalimy wiele znakomitych na-
rzdzi wspomagajcych w pracy programist diagnozujcego aplikacje. Na-
rzdzia te naley wczy do procesu rozwoju oprogramowania, aby zapewni
jak najwyszy stopie jego niezawodnoci. Mimo i wszystkie te narzdzia
stanowi doskona pomoc w znajdowaniu bdów poprzez automatyzowanie
procesu ich wyszukiwania, nie gwarantuj, e gotowy produkt bdzie ab-
solutnie bezbdny.

Po dostarczeniu programu do uytkowników problemy pojawi si na

pewno i najprawdopodobniej stanie si to w najmniej oczekiwanym mo-
mencie — najczciej podczas pracy uytkownika. W zalenoci od rodzaju
bd moe cakowicie zniechci uytkownika do dalszego korzystania
z programu lub tylko nieco uprzykrzy mu ycie. W obu tych przypadkach
mona si spodziewa telefonu od zdenerwowanego klienta dajcego wy-
janie, czemu jego produkt nie dziaa tak, jak powinien. Jedn z moliwoci
w takiej sytuacji jest poproszenie go o zdalny dostp do jego komputera.
Mimo i czasami jest to moliwe, uytkownicy najczciej podchodz do tego
niechtnie i nie zgadzaj si na takie rozwizanie. Powodów, dla których
klienci nie chc umoliwia dostpu do swoich komputerów, jest wiele.
Poniej przedstawiam kilka najczstszych z nich:

„

Zasady ustalone w firmie nie pozwalaj na przyjmowanie pocze
przychodzcych.

„

Zdalne diagnozowanie wymaga podczenia debugera do jednego lub
wikszej liczby procesów, co oznacza przestój w pracy. Jeli proces,
który ma zosta zdiagnozowany, dziaa na wanym serwerze, klient nie
bdzie chcia zaakceptowa na nim przestoju.

„

Diagnozowanie procesu poprzez tryb uytkownika lub jdra oznacza,
e programici maj peny dostp do stanu urzdzenia, wcznie z za-
wartoci jego pamici. Niektórzy uytkownicy mog obawia si
w takim przypadku naruszenia prywatnoci.

background image

416

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Jeli klient odmówi dostpu zdalnego, a odtworzenie problemu na lokal-

nym komputerze jest niemoliwe, to czy w ogóle da si co zrobi? Tak,
naley wówczas zastosowa techniki tzw. debugowania poawaryjnego (ang.
postmortem debugging). Proces ten skada si z nastpujcych etapów:

1.

Wywoanie awarii.

2.

Wykonanie zrzutu (obrazu) stanu systemu w chwili awarii (albo

— w niektórych przypadkach — przed awari i po niej).

3.

Przesanie zrzutu do przeanalizowania specjalistom.

W tym rozdziale zostay opisane róne sposoby wykonywania takich

zrzutów — czasami nazywanych plikami obrazu — róne rodzaje tych obra-
zów oraz techniki ich analizowania. Ponadto poznamy znakomit usug
gromadzenia plików obrazu o nazwie Windows Error Reporting.

Zaczniemy od podstawowych zagadnie zwizanych z plikami obrazu.

Pliki obrazu — podstawowe wiadomości

Jak ju wiemy, plik obrazu stanowi reprezentacj stanu okrelonego procesu.
Pliki takie tworzy si przede wszystkim w celu umoliwienia diagnozowania
aplikacji, gdy nie ma moliwoci przeprowadzenia diagnostyki na dziaajcym
programie. Wygenerowany plik obrazu wysya si do specjalisty, który anali-
zuje jego zawarto, nie majc dostpu do urzdzenia, na którym wystpi
problem. Praca ta polega na zapisaniu pliku na innym komputerze i analizo-
waniu go za pomoc narzdzi do diagnozowania poawaryjnego debugera.
Jakie informacje zawiera taki plik obrazu? To zaley od sposobu jego utwo-
rzenia. Wyrónia si dwa gówne rodzaje plików obrazu:

„

pene zrzuty,

„

zrzuty minimalne.

Peny zrzut zawiera ca przestrze pamici procesu, obraz pliku wy-

konywalnego, tabel uchwytów i inne informacje wykorzystywane przez
debugery. Przy generowaniu penego zrzutu nie ma moliwoci wybierania,
które informacje maj zosta zapisane. Plik taki mona jednak przekonwer-
towa na zrzut minimalny za pomoc debugera.

Minimalny plik zrzutu moe zawiera róne informacje, których wybór

jest dokonywany przez modu generujcy. Plik taki moe zawiera zarówno
informacje o konkretnym wtku, jak i peny opis obrazowanego procesu.

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

417

Moe to zabrzmi dziwnie, ale najwikszy moliwy minimalny plik zrzutu
moe zawiera wicej informacji ni zrzut peny. Dlatego w tej czci roz-
dziau skoncentruj si na zrzutach minimalnych.

Narzdzia, za pomoc których mona generowa takie pliki, zostay

zwi le opisane w tabeli 8.1.

Tabela 8.1.

Narzędzia do generowania zrzutów

Nazwa

Opis

Debugery Windows

Debugery systemu Windows umoliwiaj tworzenie zrzutów
o rónych rozmiarach oraz pozwalaj kontrolowa cay proces
generowania pliku

ADPlus

ADPlus to skadnik pakietu Debugging Tools for Windows.
Narzdzie to moe dziaa jako monitor systemu wykonujcy zrzut
w chwili wystpienia awarii lub zawieszenia. Ponadto program
ten ma opcj powiadamiania o wystpieniu awarii

Windows
Error Reporting

Windows Error Reporting to usuga firmy Microsoft umoliwiajca
zarejestrowanie si w witrynie do raportowania bdów.
Gdy w której z aplikacji danego uytkownika wystpi awaria,
z komputera, w którym ona dziaa, wysyany jest raport do witryny
Windows Error Reporting (WER). Nastpnie uytkownik moe
pobra ten raport z witryny WER wraz z plikiem zrzutu w celu
jego przeanalizowania

W tym podrozdziale nauczymy si generowa pliki obrazu za pomoc

debugerów Windows i narzdzia ADPlus. Usuga Windows Error Repor-
ting zostanie opisana nieco dalej.

W celu zilustrowania procesu tworzenia plików obrazu wykorzystamy

przykadow prost aplikacj alokujc pami na stercie, zapisujc w niej
dane i nastpnie ulegajc awarii. Kod ródowy tej aplikacji znajduje si na
listingu 8.1.

Listing 8.1.

Prosty przykład aplikacji, która ulega awarii

using System;

using System.Text;

using System.Runtime.InteropServices;

namespace Advanced.NET.Debugging.Chapter8

{

class SimpleExc

{

background image

418

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

static void Main(string[] args)

{

SimpleExc s = new SimpleExc();

s.Run();

}

public void Run()

{

Console.WriteLine("Nacinij dowolny klawisz, aby rozpocz");

Console.ReadKey();

ProcessData(null);

}

public void ProcessData(string data)

{

if (data == null)

{

throw new ArgumentException("Argument NULL");

}

string s = "Witaj: " + data;

}

}

}

Kod ródowy i plik binarny powyszego programu znajduj si w nast-

pujcych lokalizacjach:

„

Kod ródowy: C:\ADND\Chapter8\SimpleExc

„

Plik binarny: C:\ADNDBin\08SimpleExc.exe

Powód awarii tej aplikacji powinien by do oczywisty. Wywoanie funk-

cji

ProcessData

powoduje zgoszenie wyjtku

ArgumentException

,

poniewa zostaa jej przekazana warto

null

. Na pocztek wygenerujemy

zrzut za pomoc debugera.

Generowanie zrzutów przy użyciu debugera

Uruchom aplikacj, której kod ródowy znajduje si na listingu 8.1, i po-
zwól jej dziaa do wystpienia wyjtku.

ModLoad: 77bb0000 77bb6000 C:\Windows\system32\NSI.dll

ModLoad: 79060000 790b6000 C:\Windows\Microsoft.NET\Framework\v2.0.50727

\mscorjit.dll

(1860.958): CLR exception - code e0434f4d (first chance)

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

419

(1860.958): CLR exception - code e0434f4d (!!! second chance !!!)

eax=0020eaec ebx=e0434f4d ecx=00000001 edx=00000000 esi=0020eb74 edi=00416bd0

eip=767142eb esp=0020eaec ebp=0020eb3c iopl=0 nv up ei pl nz na po nc

cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202

KERNEL32!RaiseException+0x58:

767142eb c9 leave

0:000> .

.loadby sos mscorwks

0:000> !

!ClrStack

OS Thread Id: 0x958 (0)

ESP EIP

0020ebc4 767142eb [HelperMethodFrame: 0020ebc4]

0020ec68 00e10177 Advanced.NET.Debugging.Chapter8.SimpleExc.ProcessData

(System.String)

0020ec80 00e1010c Advanced.NET.Debugging.Chapter8.SimpleExc.Run()

0020ec88 00e100a7 Advanced.NET.Debugging.Chapter8.SimpleExc.Main

(System.String[])

0020eeac 79e7c74b [GCFrame: 0020eeac]

W tym momencie wygenerujemy zrzut do przeanalizowania w trybie

poawaryjnym. Najwaniejsz kwesti do rozwizania w przypadku genero-
wania zrzutu jest podjcie decyzji, ile informacji zapisa. Ogólna zasada jest
taka, e im wicej danych znajduje si w pliku obrazu, tym wicej informacji
bdziemy mieli do wykorzystania w pracy. Najwaniejszym czynnikiem
ograniczajcym jest oczywicie rozmiar pliku zrzutu. W niektórych przy-
padkach, np. na serwerach o ostrych zasadach bezpieczestwa, utworzenie
gigantycznego zrzutu jest niemoliwe i trzeba zadowoli si okrojon iloci
informacji.

Do utworzenia pliku obrazu suy polecenie

.dump

. Opcja

/m

tego po-

lecenia oznacza, e ma zosta utworzony zrzut minimalny. Opis wszyst-
kich opcji tego polecenia znajduje si w tabeli 8.2.

Oprócz opcji sterujcych wykonywaniem zrzutu naley poda jeszcze

nazw pliku, w którym zrzut zostanie zapisany. Jeli nie zostanie okrelona
pena cieka katalogu, w którym ma zosta zapisany ten plik, zostanie on
zapisany w katalogu uruchomieniowym debugera. Poniej znajduje si przy-
kadowe polecenie wykonujce peny zrzut pamici i zapisujce plik w wy-
branym katalogu.

.dump /mf c:\08dumpfile.dmp

Uruchomimy polecenie

.dump

na naszej uszkodzonej aplikacji:

0:000> .

.dump /mf 08dumpfile.dmp

Creating dumpfile.dmp - mini user dump

Dump successfully written

background image

420

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Tabela 8.2.

Opcje polecenia .dump

Opcja

Opis

a

Generuje kompletny zrzut minimalny z wczonymi wszystkimi opcjami. Zrzut
taki zawiera pene dane dotyczce pamici, uchwytów, moduu, podstawowe
dane o pamici oraz informacje na temat wtku. Równoznaczne z

/mfFhut

f

Generuje zrzut minimalny zawierajcy wszystkie dostpne i zastrzeone
strony procesu

F

Generuje zrzut minimalny zawierajcy podstawowe informacje o pamici potrzebne
debugerowi do odtworzenia caej przestrzeni adresowej pamici wirtualnej

h

Generuje zrzut minimalny zawierajcy informacje o uchwytach

u

Generuje zrzut minimalny zawierajcy informacje o niezaadowanych moduach.
Opcja dostpna tylko w systemie Windows Server 2003

t

Generuje zrzut minimalny zawierajcy informacje czasowe dotyczce wtków.
Informacje te to m.in. czas utworzenia oraz czas pracy w trybach uytkownika
i jdra

i

Generuje zrzut minimalny zawierajcy informacje o pamici pomocniczej.
Pami pomocnicza to pami (oraz niewielki obszar j otaczajcy) wskazywana
przez wska nik stosu lub pami rezerwow

p

Generuje zrzut minimalny zawierajcy bloki rodowisk procesu i wtku

w

Generuje zrzut minimalny zawierajcy wszystkie zastrzeone prywatne strony
do zapisu i odczytu

d

Generuje zrzut minimalny zawierajcy wszystkie segmenty danych obrazu

c

Generuje zrzut minimalny zawierajcy segmenty kodu obrazu

r

Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotyczcych prywatnoci. Opcja ta czyci (zastpuje zerami) wszystkie informacje
niepotrzebne do odtworzenia stosu (wcznie ze zmiennymi lokalnymi)

R

Generuje zrzut minimalny odpowiedni dla rodowisk o zaostrzonych wymogach
dotyczcych prywatnoci. Ta opcja usuwa pene cieki moduów, uniemoliwiajc
w ten sposób odtworzenie struktury katalogów

Wygenerowany plik zrzutu powinien mie rozmiar okoo 64 MB. Plik ten

naley zaadowa w innej instancji debugera przy uyciu przecznika

-z

.

Aby zaadowa wygenerowany przez nas plik, naley napisa nastpujce
polecenie:

c:\>ntsd –z 08dumpfile.dmp

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

421

Po wczytaniu pliku debuger wywietli nastpujce dane:

Loading Dump File [c:\08dumpfile.dmp]

User Mini Dump File with Full Memory: Only application data is available

Executable search path is:

Windows Server 2008 Version 6001 (Service Pack 1) MP (2 procs) Free x86 compatible

Product: WinNt, suite: SingleUserTS

Debug session time: Mon Mar 2 06:25:10.000 2009 (GMT-8)

System Uptime: 5 days 7:44:57.406

Process Uptime: 0 days 0:02:39.000

...........................

*** ERROR: Symbol file could not be found. Defaulted to export symbols for

ntdll.dll -

This dump file has an exception of interest stored in it.

The stored exception information can be accessed via .ecxr.

(1860.958): CLR exception - code e0434f4d (first/second chance not available)

eax=0020eaec ebx=e0434f4d ecx=00000001 edx=00000000 esi=0020eb74 edi=00416bd0

eip=767142eb esp=0020eaec ebp=0020eb3c iopl=0 nv up ei pl nz na po nc

cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202

kernel32!RaiseException+0x58:

767142eb c9 leave

W górnej czci powyszych danych znajduj si podstawowe informacje

na temat wczytanego pliku zrzutu. Wród nich jest lokalizacja pliku, jego typ
oraz opis dostpnych danych. Kolejny interesujcy nas fragment znajduje si
bliej koca. Jest to opis powodu wystpienia awarii (wyjtek CLR). Majc
ten plik, mona zdiagnozowa problem na dowolnym komputerze — bez
dostpu do urzdzenia, na którym wystpia awaria. Szczegóowy opis tech-
nik wykonywania analizy poawaryjnej znajduje si nieco dalej.

Jedn z wad techniki wykonywania zrzutów za pomoc debugera jest ko-

nieczno podczenia go do ulegajcego awarii procesu. Moe si wydawa,
e to niewielki problem, ale wyobra sobie, e bd wystpuje tylko raz na
jaki czas i nie udao si trafi z podczeniem debugera wanie w tym
czasie. Dobrze by byo, gdybymy mieli moliwo nakazania systemowi
Windows wykonania zrzutu, gdy wystpi awaria procesu. Taka moliwo
jest i technik t potocznie nazywa si nastawieniem debugera poawaryjne-
go. Domylnym programem tego typu uywanym przez system Windows
jest Dr Watson (wycofywany w Windows Vista i nowszych wersjach sys-
temu na rzecz nowszej technologii). Dr Watson generuje plik zrzutu, gdy
nastpi awaria procesu, i umoliwia wysanie tego pliku do firmy Microsoft
do analizy. Wykorzystywany debuger poawaryjny mona jednak zmieni
przy uyciu polece wiersza polece przedstawionych w tabeli 8.3.

background image

422

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Tabela 8.3.

Ustawienia debugera poawaryjnego

Polecenie

Wartość rejestru
Aedebug\Debugger

Opis

WinDbg –I

winDbg.exe -p %ld –e %ld -g

Ustawia WinDbg jako debuger
poawaryjny. Naley pamita,
e litera

-I

musi by wielka.

cdb –iae

cdb.exe -p %ld -e %ld –g

Ustawia cdb jako debuger
poawaryjny.

ntsd –iae

ntsd.exe –p %ld -e %ld –g

Ustawia ntsd jako debuger
poawaryjny.

drwtsn32 –i

drwtsn32 -p %ld -e %ld –g

Ustawia program Dr Watson
jako debuger poawaryjny.

Generowanie pliku zrzutu

W systemie Windows Vista wprowadzono ważną zmianę w stosunku do starszych

wersji tego systemu, dotyczącą sposobu zapisywania plików zrzutu w lokalnej

pamięci przez technologię raportowania błędów. W starszych wersjach systemu

Windows wygenerowane pliki były domyślnie zapisywane w komputerze przez

program Dr Watson. Dostęp do tych plików miał każdy, kto chciał przeprowadzić

diagnozę określonego pliku. W systemie Windows Vista Dr Watson przeszedł na

emeryturę, a jego miejsce zajął bardziej niezawodny mechanizm raportowania

błędów. Ten nowy system przy domyślnych ustawieniach nie zapisuje plików

zrzutu w pamięci lokalnej. Aby zmienić to domyślne ustawienie, należy ustawić

wartość rejestru

ForceQueue

na

1

. Powoduje to kolejkowanie wszystkich plików

zrzutu w pamięci lokalnej przed ich wysłaniem do firmy Microsoft. Ścieżka w reje-

strze do tej wartości jest następująca:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

Po ustawieniu wartości ForceQueue na 1 wszystkie pliki zrzutu będą zapisy-

wane w następującej lokalizacji:

Procesy działające w kontekście systemowym i podniesionym:

%ALLUSERSPROFILE %\Microsoft\Windows\WER\[ReportQueue|ReportArchive]

Pozostałe procesy:

%LOCALAPPDATA%\Microsoft\Windows\WER\[ReportQueue|ReportArchive]

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

423

Co tak naprawd dzieje si w czasie wykonywania polece z tabeli 8.3?

Nic wielkiego. Polecenia te zmieniaj tylko wartoci niektórych kluczy reje-
stru, które s sprawdzane przez system Windows przy wykrywaniu awarii
procesów. Poniej znajduje si cieka rejestru wykorzystywana do nasta-
wiania debugera poawaryjnego:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

Klucz

Aedebug

dziaa znakomicie w przypadku diagnozowania aplikacji

rodzimych. Natomiast do sterowania procesem diagnozowania poawaryjnego
aplikacji zarzdzanych su dwie inne wartoci —

DbgManagedDebugger

i

DbgJITDebugLaunchSetting

. Znajduj si one w nastpujcym kluczu:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

Wartość DbgManagedDebugger

Jeli debugowanie poawaryjne zostanie wczone poprzez warto

DbgJIT

´DebugLaunchSettings

, warto rejestru

DbgManagedDebugger

okrela,

który debuger ma zosta uruchomiony w przypadku wystpienia nieobsu-
onego wyjtku. Aby np. domylnym debugerem uruchamianym w przy-
padkach wystpienia nieobsuonych wyjtków by ntsd, warto rejestru

DbgManagedDebugger

naley ustawi nastpujco:

c:\program files\debugging tools for windows (x86)\ntsd.exe -p %ld

Debuger okrelony w wartoci

DbgManagedDebugger

nie musi zosta

uruchomiony natychmiast po wystpieniu nieobsuonego wyjtku. Zamiast
tego zostanie wywietlone okno dialogowe, w którym mona wybra uru-
chomienie debugera lub zamknicie aplikacji.

Jedno z najczciej zadawanych pyta na temat debugowania poawa-

ryjnego brzmi: jak wymusi automatyczne generowanie zrzutu w odpowie-
dzi na wystpienie awarii? Aby to zrobi, naley ustawi warto rejestru

DbgManagedDebugger

w nastpujcy sposób:

ntsd –pv –p %ld –c ".dump /u /ma <cieka do pliku zrzutu>; .kill; qd

Powysze ustawienie oznacza, e jeli wystpi awaria, ma zosta wczony

debuger ntsd oraz uruchomione polecenie wykonania zrzutu. Nastpnie sesja
ma zosta zamknita poprzez odczenie debugera.

Do precyzyjnego okrelania dziaa w przypadku wystpienia nieob-

suonego wyjtku suy warto rejestru

DbgJITDebugLaunchSetting

opisana w nastpnym podrozdziale.

background image

424

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Wartość DbgJITDebugLaunchSetting

Warto rejestru

DbgJITDebugLaunchSetting

suy do okrelania dziaa

w przypadku wystpienia nieobsuonego wyjtku. Jeli warto ta zostanie
ustawiona na

0

, w przypadku awarii bdzie wywietlane okno dialogowe,

w którym uytkownik bdzie móg zdecydowa, co robi. Naley pamita,
e okno to jest wywietlane tylko dla procesów interaktywnych (np. usug),
pozostae procesy bd po prostu zamykane. Przykadowe okno dialogowe
przedstawiono na rysunku 8.1.

Rysunek 8.1.

Przykładowe okno dialogowe wyświetlone po awarii aplikacji zarządzanej

Powysze okno poawaryjne informuje o wystpieniu problemu w pro-

gramie o nazwie 08SimpleExc.exe. Uytkownik moe si w nim zdecydowa
na debugowanie programu (przycisk Debuguj) lub jego zamknicie (przycisk
Zamknij program). Jeli zostanie nacinity przycisk Debuguj, system
sprawdzi ustawienie wartoci

DbgJITDebugLaunchSetting

i uruchomi

wyznaczony w niej debuger.

Jeli warto

DbgJITDebugLaunchSetting

zostanie ustawiona na

1

,

aplikacja, która ulega awarii, zostanie zamknita i zostanie zwrócony zrzut
stosu wywoa.

Jeli warto ta bdzie ustawiona na

2

, zostanie uruchomiony debuger

okrelony w wartoci

DbgManagedDebugger

bez wywietlania adnych

okien dialogowych.

Natomiast ustawienie wartoci

DbgJITDebugLaunchSetting

na

16

spowoduje wywietlanie dla procesów interaktywnych okna opisanego
powyej, a dla pozostaych procesów — uruchomienie debugera okrelonego
w wartoci

DbgManagedDebugger

.

Mimo i funkcje debugerów s wystarczajce do wygenerowania od-

powiedniego pliku zrzutu, dostpne jest jeszcze jedno narzdzie, które suy
do generowania tych plików — ma ono nazw ADPlus.

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

425

Generowanie plików zrzutu
za pomocą narzędzia ADPlus

ADPlus to narzdzie do monitorowania awarii procesów i automatyzowania
generowania plików zrzutu z moliwoci powiadamiania uytkownika lub
komputera o zaistniaej sytuacji. ADPlus to skrypt sterowany z wiersza po-
lece. Firma Microsoft zaleca uruchamianie go przy uyciu interpretera
cscript.exe. Oprócz opcji wiersza polece ADPlus mona równie konfigu-
rowa za pomoc plików konfiguracyjnych, które umoliwiaj bardziej pre-
cyzyjne sterowanie dziaaniem programu.

ADPlus moe dziaa w jednym z dwóch trybów:

„

Tryb zawiesze — suy do diagnozowania procesów wykazuj-
cych oznaki zawieszenia (np. nie robi adnego postpu albo wy-
korzystuj 100% mocy procesora). Aby monitorowa zawieszone
procesy, ADPlus musi zosta uruchomiony po ich zawieszeniu.

„

Tryb awaryjny — suy do diagnozowania procesów wykazujcych
oznaki wystpienia awarii. ADPlus musi zosta uruchomiony przed
procesem, w którym nastpia awaria.

Generowanie plików zrzutu za pomoc narzdzia ADPlus zilustruj na

przykadzie awarii programu 08SimpleExc.exe (tryb awaryjny). Uruchom
program SimpleExc.exe:

C:\ADNDBin\08SimpleExc.exe

Przed naciniciem klawisza w celu kontynuowania dziaania aplikacji

wpisz nastpujce polecenie:

C:\>adplus.vbs -crash -pn 08SimpleExc.exe -y

SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols

Przecznik

-crash

przestawia narzdzie ADPlus na tryb awaryjny,

-pn

suy do okrelania nazwy procesu, który ma by monitorowany, a

-y

— do

ustawiania cieki symboli, która ma by wykorzystywana podczas dziaania
ADPlus. Wielk zalet przecznika

-pn

jest moliwo monitorowania do-

wolnej liczby instancji dowolnego procesu.

Po zakoczeniu dziaania programu ADPlus zapisuje wynik swojego

dziaania w pliku w katalogu instalacyjnym debugerów systemu Windows.
Nazwa tego katalogu ma nastpujc struktur:

<runtype>_Mode__Date_<data uruchomienia>__Time_<czas dziaania>

background image

426

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Np. w tym przypadku po zakoczeniu dziaania ADPlus utworzy nast-

pujcy katalog:

c:\Program Files\Debugging Tools for Windows (x86)\
´Crash_Mode__Date_03-02-2009__Time_08-31-43AM

Domyln ciek mona zmieni za pomoc przecznika

-o

.

W powyszym katalogu zostao zapisanych kilka plików, ale najwaniej-

sze z nich maj rozszerzenie .dmp, poniewa zawieraj wszystkie informacje
zrzutowe. Jak wida, w katalogu znajduje si kilka plików zrzutu. Dlaczego
jest wicej ni jeden plik dla jednej awarii? Program ADPlus automatyzuje
proces gromadzenia plików zrzutu i dlatego generuje kolejne pliki w przy-
padku wystpienia z góry okrelonych sytuacji. Powód wygenerowania
kadego pliku mona odczyta z jego nazwy. W naszym przykadzie pro-
gram ADPlus wygenerowa nastpujce pliki zrzutu:

PID-4448__08SIMPLEEXC.EXE__1st_chance_Process_Shut_

Down__full_1e20_2009-03-02_08-32-17-440_1160.dmp

PID-4448__08SIMPLEEXC.EXE__2nd_chance_NET_CLR__full_

1e20_2009-03-02_08-32-08-384_1160.dmp

ADPlus wygenerowa peny plik zrzutu po wystpieniu pierwszego zda-

rzenia zamknicia procesu. Nastpnie wygenerowa kolejny peny zrzut po
wystpieniu wyjtku .NET. Czy potrzebne nam s te wszystkie pliki w na-
szej sytuacji? Nie. Dla nas najbardziej interesujcy jest drugi plik — wyge-
nerowany po wystpieniu wyjtku .NET. Oczywicie w niektórych sytu-
acjach takie okresowe generowanie plików zrzutu jest bardzo pomocne,
poniewa mona odtworzy przebieg systematycznego psucia si procesu.
ADPlus umoliwia równie ustawianie czstotliwoci zapisywania informacji
oraz warunków, w jakich ma to by robione, co w istocie oznacza, e pozwala
na sterowanie dziaaniem debugera za pomoc skryptów. Szczegóowe in-
formacje na temat pisania skryptów w ADPlus znajduj si w dokumentacji
programu. Naley jednak koniecznie pamita, e ADPlus nie wykonuje za
pomoc swoich skryptów adnych czarodziejskich sztuczek. Jest to tylko
wygodny sposób na wprowadzanie dyrektyw debugera, które s nastpnie
tumaczone na zwyke zautomatyzowane polecenia. Aby zobaczy, jak ta
wygodna konfiguracja przekada si na polecenia debugera, mona zajrze
do folderu CDBScripts znajdujcego si w tym samym katalogu co pliki
zrzutu. W naszym przykadzie w folderze tym znajduje si plik o nazwie
PID-4448__08SimpleExc.exe.cfg zawierajcy wszystkie polecenia debugera
uyte w sesji diagnostycznej.

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

427

Ostatni wan rzecz, któr trzeba wiedzie na temat programu AD-

Plus, jest sposób okrelania typu pliku zrzutu generowanego w odpowiedzi
na wystpienie awarii. Su do tego cztery przeczniki wiersza polece:

„ -FullOnFirst

— generuje peny zrzut przy pierwszym wystpieniu

wyjtku.

„ -MiniOnSecond

— generuje zrzut minimalny przy drugim wyst-

pieniu wyjtku.

„ -NoDumpOnFirst

— blokuje generowanie zrzutu minimalnego przy

pierwszym wystpieniu wyjtku. Opcja ta jest przydatna w przypadku
aplikacji, które dobrze obsuguj pierwsze wystpienie wyjtku.

„ -NoDumpOnSecond

— blokuje generowanie zrzutu minimalnego

przy drugim wystpieniu wyjtku.

ADPlus to wygodne, elastyczne i bardzo pomocne narzdzie do monito-

rowania procesów i gromadzenia informacji o wystpujcych w nich awa-
riach. W tym podrozdziale zostay opisane podstawowe wiadomoci o tym
programie. Warto jednak powici troch czasu na zapoznanie si z innymi
jego moliwociami, jak np. skrypty i techniki definiowania niestandardo-
wych procedur obsugi wyjtków, które umoliwiaj generowanie zrzutów
w odpowiedzi na wystpienie niestandardowych wyjtków.

Znajc dwa najczciej stosowane sposoby tworzenia plików zrzutu, mo-

emy przystpi do ich praktycznego wykorzystania i zapozna si z pro-
cesem rozwizywania problemów przy ich uyciu.

Diagnozowanie plików zrzutu

Mamy ju pliki zrzutu i powierzono nam zadanie znalezienia przyczyny
problemów z procesem. Co konkretnie moemy zrobi z dostarczonymi nam
plikami? Czy moemy wykona z nich zrzut pamici, obejrze uchwyty albo
wykona kod krok po kroku? Przypominam, e plik zrzutu jest tylko statycz-
nym obrazem stanu procesu w okrelonym momencie. Dlatego ustawianie
punktów wstrzymania i wykonywanie kodu krok po kroku jest niemoliwe.
Korzystanie z plików zrzutu najatwiej porówna z rcznym debugowa-
niem. Mam na myli to, e moemy tylko oglda stan aplikacji i na tej
podstawie musimy opracowa teori na temat tego, jaki kod doprowadzi
do zaistniaej sytuacji. Nietrudno si domyli, e odtwarzanie sekwencji
wykonywania kodu na podstawie statycznej analizy jest znacznie trudniejsze
ni analizowanie programu w czasie dziaania. Niemniej jednak w statycz-
nym trybie nadal mona korzysta z wielu polece, które przetwarzaj dane

background image

428

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

na bardziej zrozumia posta, i w wikszoci przypadków, jeli tylko
okae si wystarczajco duo cierpliwoci, udaje si odnale  przyczyn
problemów.

Przed przejciem do analizowania wygenerowanych plików zrzutu mu-

simy pozna dwa bardzo wane pojcia — pliki symboli i warstwa dostpu
do danych. Poniewa pliki zrzutu nie zawieraj symboli, symbole te musz
by dostpne z jakiego innego róda w czasie sesji diagnostycznej. We
wczeniejszych czciach tej ksiki poznalimy najwaniejsze polecenia
zwizane z symbolami. Drug wan rzecz jest tzw. warstwa dostpu do
danych CLR (ang. data access layer — DAC), z której bardzo czsto korzysta
rozszerzenie SOS debugera w celu dostarczenia wszystkich potrzebnych
w sesji informacji.

Warstwa dostępu do danych

Podczas diagnozowania aplikacji rodzimych wiele informacji mona zdoby
poprzez przegldanie surowej pamici. Natomiast w kodzie zarzdzanym
rozszerzenie SOS zwracane przez siebie dane tworzy na podstawie informacji
uzyskanych w duym stopniu od CLR. Rozszerzenie to, odbierajc surowe
dane, musi je poprawnie przetworzy, korzystajc z pomocy w postaci wy-
woa do CLR (tzn. wykonywania kodu CLR). Za zwizane z tym funkcje
w CLR odpowiada modu o nazwie warstwa dostpu do danych (DAC), któ-
rego implementacja znajduje si w pliku mscordacwks.dll. Poniewa system
CLR jest cay czas ulepszany, jego warstwa DAC równie zmienia si z kad
wersj (wcznie z poprawkami). Mona to atwo sprawdzi, zagldajc do
folderu instalacyjnego kadej wersji .NET zainstalowanej w komputerze.
Np. w moim komputerze plik mscordacwks.dll znajduje si w nastpujcym
folderze:

c:\Windows\Microsoft.NET\Framework\v2.0.50727

Natomiast w komputerach z zainstalowanym programem Visual Studio

2010 CTP plik ten znajduje si w nastpujcych dwóch folderach (co ozna-
cza, e z CLR 4.0 zosta dostarczony nowy plik mscordacwks.dll):

c:\Windows\Microsoft.NET\Framework\v2.0.50727

c:\Windows\Microsoft.NET\Framework\v4.0.11001

Znajomo lokalizacji tego pliku jest niezbdna, poniewa debuger za-

da podania mu tej informacji. W czasie debugowania na ywo ten problem
nie wystpuje, poniewa rozszerzenie SOS znajduje ten plik, szukajc go

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

429

w tym samym katalogu, w którym znajduje si wersja rodowiska wyko-
nawczego, w jakim jest przeprowadzana sesja diagnostyczna. Natomiast
w czasie debugowania poawaryjnego wersja CLR uyta w aplikacji moe
by inna ni wersja dostpna na komputerze, na którym jest wczytywany
i diagnozowany plik zrzutu. Przypominam zatem, e rozszerzenie SOS
debugera odwouje si do pliku mscordacwks.dll, który wykonuje kod CLR,
oraz e zaadowanie odpowiedniej wersji tego pliku ma kluczowe znacze-
nie. Poniewa posiadanie odpowiedniej wersji tego pliku jest tak wane,
firma Microsoft udostpnia wszystkie istniejce jego wersje na swoim ser-
werze symboli publicznych. Jeli debuger zostanie skierowany do tego ser-
wera (za pomoc polecenia

symfix

lub innego podobnego), sam znajdzie

potrzebny mu plik. Zdarzaj si jednak sytuacje, w których trzeba wasno-
rcznie okreli lokalizacj tego pliku. Moe si to np. zdarzy, gdy okre-
lonej wersji pliku nie ma na serwerze symboli (rzadko) lub gdy plik ten nie
zosta zapisany w tym samym miejscu, w którym znajdowa si na kompute-
rze, na którym zosta wykonany zrzut. W takich sytuacjach naley skorzysta
z polecenia

cordll

sucego do okrelania sposobu adowania pliku

mscordacwks.dll. Polecenie to jest bezcenne, gdy wystpi problemy z do-
pasowaniem wersji tego pliku. W tabeli 8.4 znajduje si opis przeczników
polecenia

cordll

.

Skd wiadomo, czy naley si zainteresowa poleceniem

cordll

? Za-

zwyczaj jeli wystpi niezgodno wersji pliku mscordacwks.dll, rozsze-
rzenie SOS zwraca nastpujc informacj o bdzie (lub co podobnego),
gdy nie moe wykona jakiego polecenia:

Failed to load data access DLL, 0x80004005

Verify that 1) you have a recent build of the debugger (6.2.14 or newer)

2) the file mscordacwks.dll that matches your version of mscorwks.dll is

in the version directory

3) or, if you are debugging a dump file, verify that the file

mscordacwks___.dll is on your symbol path.

4) you are debugging on the same architecture as the dump file.

For example, an IA64 dump file must be debugged on an IA64

machine.

You can also run the debugger command .cordll to control the debugger’s

load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.

If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your

executable path is pointing to mscorwks.dll as well.

Przyjrzymy si wszystkim propozycjom zgoszonym powyej przez de-

buger. Pierwsza z nich jest prosta, poniewa debuger prosi nas, abymy si
upewnili, czy korzystamy z najnowszej wersji debugerów (6.2.14 lub nowszej).

background image

430

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Tabela 8.4.

Przełączniki polecenia cordll

Przełącznik

Opis

-l

aduje moduy debugujce, szukajc pliku DLL na domylnych ciekach

-u

Usuwa moduy debugujce z pamici

-e

Wcza debugowanie CLR

-d

Wycza debugowanie CLR

-D

Wycza debugowanie CLR i usuwa moduy debugujce

-N

Ponownie aduje moduy debugujce

-lp

Okrela ciek do katalogu zawierajcego moduy debugujce

-Se

Umoliwia uywanie wersji o krótkiej nazwie moduu debugujcego
mscordacwks.dll

-sd

Wycza moliwo uywania wersji o krótkiej nazwie moduu
debugujcego — mscordacwks.dll. Jeli ten przecznik zostanie uyty,
debuger spodziewa si, e nazwa moduu debugujcego bdzie miaa
nastpujcy format: mscordacwks_<spec>.dll, gdzie <spec> to
<architektura>_<architektura>_<wersja pliku>

-ve

Wcza tryb wzbogacony. Tryb ten jest przydatny przy pracy
z nieprawidowymi dopasowaniami, poniewa dostarcza informacji
na temat tego, jak debuger próbuje zaadowa moduy debugujce

-vd

Wycza tryb wzbogacony

Druga podpowied jest równie prosta. Debuger podpowiada nam, abymy
si upewnili, e nasza wersja pliku mscordacwks.dll jest taka sama jak wersja,
która jest adowana. Jak pamitamy, plik mscordacwks.dll powinien znaj-
dowa si w tym samym folderze co plik mscorwks.dll. Trzecia sugestia
jest najciekawsza ze wszystkich. W tym przypadku debuger informuje, e
jeli jest wykonywane diagnozowanie pliku zrzutu, naley sprawdzi, czy
plik mscordacwks__.dll znajduje si na ciece symboli. Co to za plik?
W tabeli 8.4 znajduje si polecenie

-sd

wczajce dug nazw pliku

mscordacwks.dll. Duga nazwa to nazwa z dodan informacj o architektu-
rze i numerem kompilacji pliku DLL. Dziki tym informacjom mona
zmodyfikowa ciek symboli, aby wskazywaa waciwy plik DLL, oraz
ponownie wykona polecenie

cordll

, aby ponownie zaadowa plik

mscordacwks.dll. Jeli np. do wykonania pliku zrzutu wykorzystano wersj
1.1.1.0 pliku mscordacwks.dll oraz dokonano tego w komputerze x86, mona

background image

P

L I K I O B R A Z U

P O D S T A W O W E W I A D O M O  C I

431

nazw pliku mscordacwks.dll zmieni na mscordacwks_x86_x86_1.1.1.0.dll,
ustawi ciek symboli debugerów na jego lokalizacj i ponownie zaa-
dowa moduy debugujce za pomoc polecenia

cordll

.

0:008> .

.sympath+ <path to renamed module>

0:008> .

.cordll -ve -u -l

Czwarta sugestia dotyczy upewnienia si, e architektura komputera, na

którym przeprowadzana jest diagnostyka, zgadza si z architektur kompu-
tera, na którym zosta wykonany zrzut. Poniewa debuger wykonuje swoj
prac poprzez wykonywanie kodu w DAC, zalecane jest, aby debugowa
pliki zrzutu w architekturze o takiej samej liczbie bitów jak ta, w której
utworzono plik. Jeli np. uyto by 64-bitowego debugera do wygenerowania
pliku zrzutu procesu 32-bitowego dziaajcego w systemie 64-bitowym przy
uyciu nakadki WOW64, nie udaoby si przeprowadzi diagnostyki tego
pliku.

W ostatnim wierszu powyszych danych znajduje si pytanie, czy na

ciece plików wykonywalnych znajduje si plik mscorwks.dll. Zawarto
cieki plików wykonywalnych mona zmieni w debugerze za pomoc
polecenia

exepath

(lub

exepath+

w przypadku dodawania cieek). Np.

w przypadku diagnozowania pliku zrzutu, przy wykonywaniu którego plik
mscorwks.dll znajdowa si w katalogu c:\windows\microsoft.net\framework\
v2.0.50727
, mona zastosowa ponisze polecenie ustawiajce poprawnie
ciek plików wykonywalnych (nastpnie naley uy polecenia

.reload

,

aby nowa cieka zostaa wczytana przez debuger):

0:008> .

.exepath+ c:\windows\microsoft.net\framework\v2.0.50727

Executable image search path is: c:\windows\microsoft.net\framework\v2.0.50727

0:008> .

.reload

We wszystkich dotychczas opisanych sytuacjach przyjto zaoenie, e

plik mscordacwks.dll jest dostpny w jednym lub innym miejscu (na serwe-
rze symboli publicznych lub na komputerze lokalnym). Jeli nie mona
znale  wersji pliku DLL, która zostaa uyta przy generowaniu pliku
zrzutu, najlepiej jest poprosi osob, która to zrobia, o przesanie odpo-
wiedniej wersji pliku mscordacwks.dll. Po otrzymaniu pliku mona go
zaadowa, stosujc techniki opisane powyej.

Okrelenie waciwej wersji pliku mscordacwks.dll bywa czasami trudne

i uzyskanie biegoci w jej znajdowaniu wymaga troch czasu i przeprowa-
dzenia kilku prób. Po zaadowaniu tego pliku rozszerzenie SOS bdzie
w peni funkcjonalne i bdzie mona ponowi diagnozowanie.

background image

432

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Analizowanie plików zrzutu
— nieobsłużone wyjątki .NET

W poprzednim podrozdziale wygenerowalimy plik zrzutu awaryjnej apli-
kacji i naszym zadaniem jest znalezienie przyczyny problemów, majc do
dyspozycji tylko ten plik.

Aby móc wykorzysta ten plik, musimy o tym poinformowa debuger. Do

tego suy przecznik

-z

:

C:> ntsd –z C:\08dumpfile.dmp

Pierwsz wan informacj zwrócon przez debuger jest wyjtek CLR:

This dump file has an exception of interest stored in it.

The stored exception information can be accessed via .ecxr.

(2dc4.2a08): CLR exception - code e0434f4d (first/second chance not available)

eax=0024ef20 ebx=e0434f4d ecx=00000001 edx=00000000 esi=0024efa8 edi=002c43e8

eip=767142eb esp=0024ef20 ebp=0024ef70 iopl=0 nv up ei pl nz ac po nc

cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212

kernel32!RaiseException+0x58:

767142eb c9 leave

Z powyszych danych wynika, e badany przez nas plik zosta wygene-

rowany z powodu wystpienia wyjtku CLR. Kolejnym krokiem bdzie
dokadne przyjrzenie si temu wyjtkowi.

0:000> k

kb

ChildEBP RetAddr Args to Child

0024ef70 79f071ac e0434f4d 00000001 00000001 kernel32!RaiseException+0x58

0024efd0 79f0a629

01b66c20 00000000 00000000

mscorwks!RaiseTheExceptionInternalOnly+0x2a8

0024f094 01630197 01b658d0 0024f0e0 0024f0fc mscorwks!JIT_Throw+0xfc

WARNING: Frame IP not in any known module. Following frames may be wrong.

00000000 00000000 00000000 00000000 00000000 0x1630197

0:000> !

!pe 01b66c20

Exception object: 01b66c20

Exception type:

System.ArgumentException

Message:

Argument NULL

InnerException: <none>

StackTrace (generated):

SP IP Function

0024F09C 01630197

08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.ProcessData

(System.String)+0x57

0024F0B4 01630124

08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.Run()+0x34

0024F0C8 016300A7 08SimpleExc!Advanced.NET.Debugging.Chapter8.SimpleExc.Main

(System.String[])+0x37

StackTraceString: <none>

HResult: 80070057

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

433

Sdzc po tym wyjtku, moemy wywnioskowa, e aplikacja ulega

awarii z powodu nieprawidowej wartoci (

NULL

) argumentu przekazanego

w wywoaniu metody. Na podstawie dostarczonego zrzutu stosu wywoa
moemy przeprowadzi prosty przegld kodu, dziki czemu uda si znale 
problem. Mimo i powyszy przykad jest bardzo prosty, stanowi on dowód,
e diagnozowanie aplikacji zarzdzanych po wystpieniu awarii jest jak naj-
bardziej moliwe. W procesie tym mona korzysta ze wszystkich bardzo
pomocnych polece rozszerze debugera SOS i SOSEX.

Usługa raportowania błędów

Kady uytkownik systemu Windows przynajmniej raz w yciu widzia okno
dialogowe widoczne na rysunku 8.2.

Rysunek 8.2.

Okno dialogowe programu Dr Watson

Okno to jest graficznym elementem technologii o nazwie Usuga rapor-

towania bdów (ang. Windows Error Reporting — WER). Mona si w nim
zdecydowa na wysanie raportu o bdzie firmie Microsoft. Jeli uytkownik
wyle taki raport, zostanie on przesany zabezpieczonym kanaem (HTTPS)
do bazy danych Microsoftu, w której zostanie przydzielony do odpowiedniej
kategorii i zapisany w celu pó niejszego przeanalizowania. Jak nietrudno si
domyli, w raporcie tym znajduje si równie plik zrzutu, na podstawie któ-
rego programici mog spróbowa znale  przyczyn zaistniaego problemu.
Z Usugi raportowania bdów mog korzysta aplikacje rónych produ-
centów, nie tylko firmy Microsoft. Raportowaniu podlega kady proces sys-
temu Windows wywoujcy jak awari. Aby jednak uzyska dostp do ra-
portów zgaszanych przez nasze aplikacje, musimy najpierw zarejestrowa
si w Usudze raportowania bdów. W tym podrozdziale dowiesz si, jak
dziaa usuga WER, co jest w jej ramach wysyane, jak zarejestrowa si
w tej usudze oraz jak pobiera z niej raporty.

background image

434

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Architektura usługi Windows Error Reporting

Windows Error Reporting to usuga gromadzenia danych dotyczcych awarii
umoliwiajca firmie Microsoft i innym producentom oprogramowania atwe
uzyskanie dostpu do informacji zwizanych z ich programami. Ogólny
schemat dziaania usugi WER zosta przedstawiony na rysunku 8.3.

Rysunek 8.3.

Schemat usługi WER

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

435

Dwa najwaniejsze elementy powyszego schematu to:

„

Komputery, na których dziaaj aplikacje sprawiajce problemy i które
wysyaj raporty do WER.

„

Producent oprogramowania monitorujcy raporty na temat jego apli-
kacji przysyane do WER.

Wyobra my sobie, e gdzie na wiecie znajduje si komputer, na któ-

rym dziaa jaka aplikacja (proces X na rysunku 8.3) wyprodukowana przez
firm ADND. Program ten ulega awarii, co powoduje wywietlenie okna
dialogowego moduu Dr Watson, w którym uytkownik zgadza si na
wysanie raportu o bdzie poprzez bezpieczny kana HTTPS do usugi WER.
Usuga ta segreguje przychodzce raporty i zapisuje informacje o bdach
w odpowiednich kategoriach. Uytkownik z firmy ADND wysya zapytania
do bazy danych WER na temat aplikacji swojej firmy i w odpowiedzi uzy-
skuje informacje. Teraz firma ADND moe rozwiza zaistniay problem
i zdefiniowa odpowied , która zostanie przedstawiona uytkownikowi apli-
kacji przez modu Dr Watson przy nastpnej awarii. Reakcja ta moe by
przekazana w formie poprawki do programu lub jakiej pomocnej informacji.

Jak wida, usuga WER to bardzo pomocny system umoliwiajcy bez-

pieczne gromadzenie informacji o bdach i wykorzystanie ich przez pro-
ducentów oprogramowania do badania jakoci ich aplikacji. Ponadto
producenci mog publikowa odpowiedzi na poznane problemy i dodawa je
do systemu reagowania WER, dziki czemu klienci bez problemu uzy-
skuj poprawki, gdy s one dostpne.

Po co wysyłać informacje o błędach

Gdy Dr Watson obudzi się, aby poinformować Cię o wystąpieniu awarii, możesz się

zastanawiać, po co wysyłać te raporty. Czy ktoś coś z nimi robi? Prawda jest taka,

że firma Microsoft bardzo poważnie traktuje raporty o błędach. Dlatego właśnie

w ogóle powstał cały ten system raportowania. Dane z raportów są aktywnie

analizowane i rozsyłane po różnych działach, których dotyczą. Gdy źródło problemu

zostanie odkryte i programiści opracują łatkę, zostaje ona opublikowana (zwykle

poprzez usługę Microsoft Update) do zainstalowania na komputerach użytkowni-

ków. Innymi słowy, każdy użytkownik powinien wysyłać wszystkie raporty o błędach,

aby firma Microsoft lub inni producenci mogli przeanalizować problem i opracować

jego rozwiązanie.

background image

436

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

W dalszej czci tego podrozdziau do zilustrowania procesu korzystania

z usugi WER bdzie wykorzystywana aplikacja 08SimpleExc.exe z wcze-
niejszego podrozdziau.

Pierwsz czynnoci, jak naley wykona, aby móc korzysta z usugi

WER, jest rejestracja w tej usudze.

Rejestrowanie się w usłudze WER

Aby sta si uytkownikiem usugi WER (tzn. móc pobiera z niej raporty),
naley si zarejestrowa. Proces rejestracji dzieli si na dwa etapy:

„

Utworzenie konta uytkownika.

„

Utworzenie konta firmowego.

Proces rejestracji mona rozpocz na poniszej stronie:

„

https://winqual.microsoft.com/SignUp/

Po wpisaniu powyszego adresu w oknie przegldarki zostanie wywie-

tlona strona widoczna na rysunku 8.4.

Rysunek 8.4.

Pierwsza strona procesu rejestracji w usłudze WER

Aby utworzy konto uytkownika, naley mie konto firmowe. Jeli masz

ju konto firmowe, moesz go poszuka lub wybra jego nazw z listy roz-
wijanej. Gdy ju wybierzesz swoje konto firmowe, kliknij przycisk Next, aby
przej do kolejnego etapu rejestracji. Poniewa nie utworzylimy jeszcze
konta firmowego, przechodzimy do sekcji Create a Company Account
(rysunek 8.5).

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

437

Rysunek 8.5.

Tworzenie konta firmowego

Tworzenie konta firmowego skada si z trzech etapów:

1.

Utworzenie podpisanego pliku Winqual.exe. Kada firma, która chce

zaoy konto w usudze WER, musi dokona autoidentyfikacji. Do
tego celu jest wykorzystywany cyfrowy certyfikat podpisywania kodu
Class 3 lub certyfikat instytucji certyfikujcej, który mona kupi
w firmie VeriSign (www.verisign.com/code-signing/content-signing-
certificates/winqual-partners/index.html
). Po otrzymaniu certyfikatu
naley nim podpisa plik Winqual.exe i wysa do firmy Microsoft do
weryfikacji.

2.

Dostarczenie informacji rozliczeniowych. Wikszo funkcji usugi

WER jest bezpatna, ale za niektóre nowe udoskonalenia trzeba za-
paci. Dlatego firma Microsoft wymaga podania informacji rozlicze-
niowych.

3.

Podanie informacji kontaktowych poprzez utworzenie konta uytkow-

nika, za pomoc którego mona uzyska dostp do konta firmowego.

background image

438

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Zaczniemy od punktu 1 (podpisywania pliku Winqual.exe). Jak wspomi-

naem, firma Microsoft ze wzgldów bezpieczestwa wymaga, aby kada
firma rejestrujca si w usudze WER dokonaa autoidentyfikacji za pomoc
podpisu kodu ródowego Class 3 lub certyfikatu wydanego przez instytucj
certyfikujc. W dalszej czci tego rozdziau przyjem, e mamy ju certy-
fikat VeriSign. Najpierw musimy pobra plik do podpisania z serwera Micro-
softu pod nastpujcym adresem:

https://winqual.microsoft.com/signup/winqual.exe

Zapisz ten plik na dysku twardym w folderze C:\Sign. Teraz potrzebne

bd narzdzia do podpisywania kodu. Narzdzia te znajduj si pod na-
stpujcym adresem:

https://winqual.microsoft.com/signup/signcode.zip

Zapisz pobrany plik na dysku i wypakuj jego zawarto w folderze C:\Sign.

Po wypakowaniu powinny pojawi si dwa pliki:

„

readme.rtf — plik zawierajcy instrukcje podpisywania kodu pliku
binarnego za pomoc narzdzi do podpisywania kodu. Ponadto plik
ten zawiera haso, którego naley uy przy wypakowywaniu pliku
signcode.exe, równie znajdujcego si w tym archiwum ZIP.

„

signcode.exe — aplikacja, za pomoc której podpiszemy plik Wi-
nqual.exe
.

Wypakuj plik signcode.exe (pamitaj o podaniu hasa z pliku readme.rtf)

w tym samym folderze, w którym znajduje si plik Winqual.exe (C:\Sign).
Ponadto skopiuj do tego folderu plik certyfikatu podpisywania kodu (z roz-
szerzeniem .spc) i klucz prywatny (z rozszerzeniem .pvk). Do podpisania
pliku Winqual.exe zastosuj nastpujce polecenie:

C:\Sign>signcode.exe /spc myCert.spc /v myKey.pvk –t

http://timestamp.verisign.com/scripts/timstamp.dll winqual.exe

Succeeded

Nazwy plików myCert.spc i myKey.pvk zastp nazwami wasnych plików

certyfikatu i klucza prywatnego. Podczas procesu podpisywania trzeba wpro-
wadzi haso klucza prywatnego. Podaj haso dostarczone przez VeriSign
podczas procesu nabywania certyfikatu. Jeli podpisywanie powiedzie si, zo-
stanie wywietlony stosowny komunikat. Jeli wystpi jakie bdy, sprawd ,
czy poprawnie zostay wpisane nazwy plików certyfikatu i klucza prywatne-
go oraz czy znajduj si one w tym samym folderze co plik signcode.exe.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

439

Nastpnym etapem procesu rejestracji jest wysanie podpisanego pliku

Winqual.exe do firmy Microsoft w celu weryfikacji. Na stronie widocznej na
rysunku 8.5 kliknij przycisk Next. Na nastpnej stronie (rysunek 8.6) znaj-
duje si formularz, za pomoc którego mona wysa plik do firmy Microsoft.

Rysunek 8.6.

Wysyłanie podpisanego pliku Winqual.exe

Aby wysa plik, naley wpisa w ciek do niego i klikn przycisk

Next. Po tym zostanie wywietlona kolejna strona, na której naley poda
informacje rozliczeniowe (rysunek 8.7).

Rysunek 8.7.

Strona informacji rozliczeniowych

background image

440

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Jak wspominaem, wikszo funkcji usugi WER jest bezpatna, ale za

niektóre firma Microsoft pobiera opaty. Informacje rozliczeniowe zostan
wykorzystane, jeli uytkownik skorzysta z której z patnych funkcji.

Wprowad informacje rozliczeniowe swojej firmy (pola oznaczone dru-

kiem pogrubionym naley obowizkowo wypeni) i kliknij przycisk Next.
Przejdziesz do strony tworzenia profilu konta (rysunek 8.8).

Rysunek 8.8.

Strona tworzenia profilu konta

Dane wpisane w polach User Name i Password bd suyy pó niej do

logowania do konta w usudze. Wypenij wszystkie pola formularza, w szcze-
gólnoci zwró uwag na wymagania dotyczce hase opisane na dole strony.
Utworzenie silnego hasa jest konieczne, aby informacje dotyczce bdów
firm byy bezpieczne.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

441

Po wypenieniu formularza kliknij przycisk Next, aby przej do strony

z informacj o pomylnym zakoczeniu procesu tworzenia nowego konta
(rysunek 8.9).

Rysunek 8.9.

Pomyślne zakończenie procesu tworzenia nowego konta

Ostatnie czynnoci, jakie naley wykona przed uzyskaniem dostpu do

WER, to ustalenie praw dostpu i podpisanie umów. Zaczniemy od praw
dostpu. Kliknij cze Manage Permissions, aby przej na stron zarzdzania
prawami dostpu widoczn na rysunku 8.10.

Rysunek 8.10.

Zarządzanie prawami dostępu

background image

442

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

W razie potrzeby zaznacz pola wyboru Sign Master Legal Agreements,

View WER Data oraz Download WER Data i kliknij przycisk Update. Warto
zauway, e z jednym kontem firmowym WER moe by powizanych
wiele kont uytkownika. Jest to przydatne, gdy potrzebne s konta o rónych
poziomach dostpu do danych (których okrelanie przedstawiono na rysunku
8.10). Np. jeden uytkownik moe mie dostp do raportów o bdach, a inny
moe mie moliwo podpisywania umów.

Teraz wrócimy do strony widocznej na rysunku 8.9, aby zakoczy pro-

ces poprzez podpisanie umowy, która jest wymagana przez firm Microsoft.
Kliknij cze Sign Legal Agreements, co spowoduje przejcie na stron umowy
dotyczcej korzystania z usugi Windows Error Reporting. Przeczytaj uwa-
nie wszystkie informacje i jeli akceptujesz warunki, wprowad informacje
na dole ostatniej strony, aby podpisa umow. Jeli chcesz zachowa dla
siebie kopi umowy, moesz wprowadzi w formularzu dane swojej firmy
i j wydrukowa.

Na tym koczy si proces rejestracji. Od tej pory moesz korzysta

z wszystkich funkcji usugi WER, logujc si do swojego konta pod adresem
https://winqual.microsoft.com/default.aspx.

Poruszanie się po witrynie usługi WER

Po zalogowaniu si w usudze WER na stronie wywietlane s najnowsze
wiadomoci dotyczce Winqual. Po lewej stronie znajduje si kolumna za-
wierajca cza do rónych czci witryny. Trzy najwaniejsze czci tej
kolumny to:

„

Windows Logo Programs.

„

Windows Error Reports.

„

Driver Distribution Center.

My zajmiemy si tylko sekcj Windows Error Reports, a mówic dokad-

niej, czci Software usugi WER. Opcje dostpne w menu Software przed-
stawiono na rysunku 8.11.

Opcja Product Rollups w kategorii Event Views suy do wywietlania

raportów o bdach, posegregowanych wedug nazwy i wersji produktu.
Taka przykadowa strona jest przedstawiona na rysunku 8.12.

Na powyszym rysunku wida, e zarejestrowano tylko jeden produkt

Advanced .NET Debugging. Produkt ten ma dwie kolumny, dziki
którym mona uzyska bardziej szczegóowe informacje na temat zda-
rze (awarii i innych), które mogy zosta zgoszone:

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

443

Rysunek 8.11.

Opcje menu Software usługi WER

Rysunek 8.12.

Przykładowa strona Product Rollup

„

Eventlist — kliknicie tej ikony powoduje przejcie na stron za-
wierajc list wszystkich zdarze, które miay miejsce w aplikacji.

„

Hotlist — kliknicie tej ikony powoduje przejcie na stron z infor-
macjami na temat najczstszych problemów w aplikacji z ostatnich
90 dni.

Kolejnym elementem menu jest kategoria Administration. Znajduj si

w niej nastpujce opcje:

„

Manage Mappings — umoliwia powizanie plików binarnych z pro-
duktami, dziki czemu usuga WER rozpoznaje, które pliki nale do
poszczególnych produktów. Sposób tworzenia takiego powizania
poka nieco pó niej.

background image

444

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

„

Manage Responses — umoliwia zdefiniowanie odpowiedzi na czsto
zgaszane przez uytkowników problemy. W istocie oznacza to utwo-
rzenie odpowiedzi zwrotnej, która moe zawiera wszystko: od zwy-
kych informacji po atki. Sposób definiowania odpowiedzi równie
poka nieco dalej.

Znamy ju ogólny rozkad witryny WER. Teraz przejdziemy do wizania

plików binarnych z produktami, aby poinformowa usug, które pliki nale
do poszczególnych produktów.

Wiązanie plików binarnych z produktami

Po zalogowaniu si na koncie naley tak ustawi konfiguracj, aby wszystkie
informacje o bdach naszych aplikacji byy przesyane na nasze firmowe
konto. Gdy do usugi WER dotrze raport o bdzie, musi ona przyporzd-
kowa go waciwej firmie. Najwaniejszym elementem tego procesu jest
nazwa aplikacji. Dlatego firmy rejestrujce si w usudze WER musz
poda w niej nazwy wszystkich swoich produktów (wcznie z wszystkimi
plikami binarnymi). Informacje te s nastpnie przekazywane do witryny
WER w odpowiednio sformatowanym pliku XML. Plików tych nie kompi-
luje si samodzielnie, tylko uywa si do tego narzdzia WER o nazwie
Microsoft Product Feedback Mapping Tool. Narzdzie to mona pobra pod
nastpujcym adresem:

www.microsoft.com/downloads/details.aspx?Family
´Id=4333E2A2-5EA6-4878-BBE5-60C3DBABC170&displaylang=en

Pobierzemy ten program i wypróbujemy go. Po jego zainstalowaniu

kliknij Start/Programy/Microsoft Product Feedback Mapping Tool. Zostanie
wywietlona pierwsza strona kreatora, który poprowadzi Ci przez proces
wizania (rysunek 8.13).

Proces tworzenia powizania plików w usudze WER zilustruj na

przykadzie znanej nam ju aplikacji 08SimpleExc.exe. Zaznacz pole wy-
boru Create a new mapping file i kliknij przycisk Next. Na rysunku 8.14
pokazano nastpn stron kreatora — o nazwie Gathering Product Mapping
Information
.

Poniej znajduje si opis opcji dostpnych na tej stronie. Naley pamita,

aby przed przejciem dalej wprowadzi takie same informacje jak na rysunku.

„

Product file(s) directory path — okrela ciek do katalogu z plikami
binarnymi aplikacji.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

445

Rysunek 8.13.

Narzędzie Microsoft Product Feedback Mapping Tool

Rysunek 8.14.

Strona Gathering Product Mapping Information

„

Product Name — okrela nazw produktu, z którym maj zosta
zwizane pliki binarne. Nazwa ta powinna by atwa do rozpoznania
dla uytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.

background image

446

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

„

Product Version — okrela wersj produktu, z którym maj zosta
zwizane pliki binarne. Warto ta powinna by atwa do rozpozna-
nia dla uytkowników konta WER, aby mogli oni wygodnie grupowa
informacje do przeszukiwania.

Po wprowadzeniu wszystkich informacji w tym i kolejnym oknie kliknij

przycisk Next. Nastpnie kreator zada podania nazwy pliku wizania, który
zostanie niebawem wygenerowany. Wprowad nastpujc ciek i kliknij
przycisk Next:

C:\testmap.xml

Ostatni etap procesu, polegajcy na wysaniu pliku wiza do witryny

WER, jest przedstawiony na rysunku 8.15.

Rysunek 8.15.

Wysyłanie pliku wiązań do usługi WER

Zaznacz znajdujce si na tej stronie kreatora pole wyboru i kliknij przy-

cisk Finish. Zostanie uruchomiona przegldarka internetowa z wywietlon
stron wysyania pliku (rysunek 8.16).

Na tej stronie wprowad ciek do utworzonego przed chwil pliku

wiza i kliknij przycisk Submit. Po pomylnym wysaniu pliku proces wiza-
nia plików z produktem jest zakoczony. Jeli masz wicej produktów, mu-
sisz powtórzy wszystkie opisane czynnoci dla kadego z nich osobno.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

447

Rysunek 8.16.

Strona wysyłania pliku wiązań

Wracamy do strony gównej usugi WER. Aby rozporzdza swoimi

powizaniami plików z produktami, naley po lewej stronie wybra opcj
Manage Mappings z menu Software. Mona zarówno wybra Product and
File Mappings
, jak i wysa plik wiza. Np. efekt wybrania cza File Map-
ping
po wysaniu pliku wiza przedstawia rysunek 8.17.

Rysunek 8.17.

Wiązania plików w usłudze WER

background image

448

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Na powyszym rysunku wida, e mamy kilka wiza plików, z których

kade ma wasny zestaw atrybutów (np. data cza i powizania). Dodatkowo
wywietlone s informacje administracyjne, np. identyfikator i adres e-mail
osoby, która utworzya dane wizanie.

Majc wizania plików z produktem, moemy przej do funkcji WER

zwizanych z generowaniem raportów. Nauczymy si generowa raporty
z informacji otrzymanych od uytkowników oraz szczegóowo analizowa te
raporty (np. zrzuty awaryjne).

Wysyłanie zapytań do usługi WER

Mamy ju konto w usudze WER oraz powizalimy plik binarny 08Simple
Exc.exe
z produktem. Czas zatem na zapoznanie si z mechanizmem pobie-
rania z WER informacji na temat zgoszonych bdów w aplikacji. Urucho-
mimy nasz program klika razy i nakaemy moduowi Dr Watson wysanie
do witryny WER informacji o awariach. Naley pamita, e od wysania
raportu do jego pojawienia si w WER musi upyn nieco czasu.

Gdy wysane raporty bd ju dostpne, na stronie Product Rollup zo-

stanie wywietlona tabela produktów, jak na rysunku 8.18.

Rysunek 8.18.

Strona Product Rollup z wyszczególnionymi błędami

Na rysunku 8.18 znajduje si nasz produkt (Advanced .NET Debugging) oraz
ogólna liczba zaraportowanych zdarze. Dodatkowo w kolumnach Eventlist
i Hotlist znajduj si ikony wywietlajce wszystkie zdarzenia, które wyst-
piy w konkretnym produkcie, oraz bdy, które powtarzay si najczciej
w cigu ostatnich 90 dni. Lista Hotlist jest znakomitym sposobem na ziden-
tyfikowanie najwaniejszych problemów z aplikacj. Na rysunku 8.19 znaj-
duje si przykadowa strona listy zdarze.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

449

Rysunek 8.19.

Lista zdarzeń produktu Advanced .NET Debugging

Na stronie tej znajduje si tabela, w której wierszach zapisane s in-

formacje o poszczególnych zdarzeniach. Na rysunku 8.19 wida, e zostao
zgoszone tylko jedno zdarzenie, ale za to dwukrotnie. W tabeli znajduje si
równie informacja o tym, jakiego rodzaju zdarzenie spowodowao wygene-
rowanie danego raportu. W naszym przypadku jest to typ CLR20 Managed
Crash
. Oznacza to, e zdarzenie miao miejsce z powodu awarii w aplikacji
zarzdzanej wykorzystujcej CLR 2.0. Klikajc identyfikator zdarzenia, mona
wywietli szczegóowe informacje na jego temat. Strona szczegóów zda-
rzenia jest podzielona na trzy czci:

„

Event Signature — poniewa z kadym produktem moe by zwi-
zanych wiele zdarze, kade zdarzenie musi mie niepowtarzalny
identyfikator. Skadniki takiego identyfikatora, zapewniajce jego
niepowtarzalno, s nastpujce: nazwa i wersja aplikacji, nazwa
i wersja moduu, miejsce (przesunicie) w module, który spowodo-
wa wystpienie zdarzenia. Jak wida na rysunku 8.20, w module
08SimpleExc.exe awari wywoao miejsce o przesuniciu 4734.

„

Event Time Trending Details — wykres znajdujcy si w tej sekcji
przedstawia czasowy przebieg wystpowania zdarzenia. Na rysunku
8.20 wida, e nasze zdarzenie wystpio 16 marca, a pó niej czsto-
tliwo jego wystpowania malaa.

„

Platform Details — zawiera szczegóowe informacje dotyczce kon-
kretnego zdarzenia, np. system operacyjny i jzyk. Informacje z tej
sekcji s bezcenne przy identyfikowaniu problemów wystpujcych
tylko w okrelonych konfiguracjach i umoliwiaj wysnucie wnio-
sków, e np. problem zdarza si tylko w angielskich wersjach jzy-
kowych programu.

background image

450

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Rysunek 8.20.

Szczegóły zdarzenia modułu 08SimpleExc.exe

Na rysunku 8.20 widoczne s tylko dane dotyczce aplikacji 08Simple

Exc.exe.

Strona szczegóów zdarze zawiera równie sekcj o nazwie Data Col-

lection, któr przedstawiono na rysunku 8.21.

Rysunek 8.21.

Sekcja gromadzenia danych

W sekcji Data Collection mona przej do listy dostpnych plików .cab

okrelonego zdarzenia poprzez kliknicie ikony Cab Status albo zmieni za-
sad gromadzenia danych dla wybranego zdarzenia, klikajc ikon Data
Request
. Na rysunku 8.22 przedstawiono okno zasady gromadzenia danych.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

451

Rysunek 8.22.

Zasada gromadzenia danych

Pamitaj, gdy w aplikacji wystpi awaria, komputer, na którym to si stao,

czy si z usug WER w celu sprawdzenia ustawionej zasady gromadzenia
danych. Jeli zasada zostaa zmieniona i wymaga ponownego wysania, kom-
puter klienta tworzy nowy plik .cab zgodnie z zasad i wysya go do WER.
W oknie zasady gromadzenia danych mona okreli, jakie dodatkowe in-
formacje maj by zbierane w tym procesie. Oprócz informacji systemowych
mona pobra dane sterty oraz dodatkowe pliki okrelone za pomoc ze-
stawu predefiniowanych zmiennych rodowiskowych. Ponadto mona okre-
li liczb dodatkowych plików .cab, które maj zosta zebrane.

Ostatnia wana kolumna tabeli przedstawionej na rysunku 8.19 ma na-

zw Cabs. Kliknicie ikony powoduje wywietlenie listy dostpnych dla
zdarzenia plików .cab. Plik .cab to zbiór plików reprezentujcych informacje
o zdarzeniu (jeden plik .cab przypada na jedno wysanie) wysyane przez
uytkowników, którzy zdecyduj si wysa raport do firmy Microsoft.
Jednym z najwaniejszych plików takiego zbioru jest zrzut wykonany
w chwili wystpienia awarii. Plik ten mona wykorzysta do zdiagnozowa-
nia problemu poawaryjnie za pomoc technik opisanych wczeniej.

background image

452

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Wiemy ju, jakie informacje s udostpniane poprzez usug WER

— wszystko od ogólnego przegldu zdarze po szczegóowe dane oparte na
informacjach przesanych przez uytkowników. Teraz zwrócimy nasz uwag
na ostatni etap procesu — udzielanie odpowiedzi uytkownikom po rozwi-
zaniu ich problemu.

Odpowiadanie na problemy

Aby odpowiedzie uytkownikom na okrelone zdarzenie, naley przej na
jego stron Event Details. Jeli jeszcze nie zostaa zarejestrowana dla niego
adna odpowied , na górze strony bd znajdoway si opcje suce do
rejestrowania odpowiedzi (rysunek 8.23).

Rysunek 8.23.

Opcje odpowiedzi na zdarzenie

S trzy róne poziomy rejestrowania odpowiedzi:

„

Event — wykorzystywany do publikowania poprawek pojedynczych
zdarze, które nie zostan wcielone do aktualizacji produktu.

„

Application — poziom aplikacji umoliwia tworzenie odpowiedzi,
które zostan przedstawione wszystkim uytkownikom majcym okre-
lon wersj programu. Taka odpowied moe mie posta aktualizacji
(np. nowej wersji).

„

Module — poziom moduu umoliwia tworzenie odpowiedzi prze-
znaczonych dla uytkowników uywajcych okrelonej wersji naszego
moduu. Taka odpowied moe mie posta aktualizacji (np. nowej
wersji).

My wybierzemy opcj rejestracji odpowiedzi na pojedyncze zdarzenie.

Kliknij pole wyboru Event, a nastpnie kliknij przycisk Register Response.
Teraz trzeba poda szczegóy odpowiedzi na zdarzenie. Do zarejestrowania
odpowiedzi potrzebne s nastpujce informacje:

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

453

„

Products — nazwa produktu.

„

URL of Solution/Info — adres URL odpowiedzi. Adres ten powinien
prowadzi na stron zawierajc wszystkie informacje wymagane do
udzielenia odpowiedzi.

„

Response Template — szablon odpowiedzi. Mona wykorzysta go-
towy szablon albo zdefiniowa wasny. Przykadowe gotowe szablony
to: System Does Not Meet Minimum Requirements (system nie spenia
podstawowych wymaga), Product Upgrade (uaktualnienie produktu)
czy Upgrade to New Version (uaktualnienie do nowej wersji). Zalenie
od wybranej z tej listy opcji wygld pola podgldu moe si zmienia.

„

Response Template Preview — podgld informacji, które zostan
opublikowane w odpowiedzi.

„

Additional Information — dodatkowe informacje, które chcielibymy
doda do odpowiedzi.

Po wprowadzeniu wszystkich informacji kontynuujemy rejestracj

odpowiedzi, przechodzc na stron Response Management (zarzdzanie
odpowiedziami), na której znajduje si lista wszystkich odpowiedzi, jakie
zarejestrowalimy do tej pory. Naley zauway, e nowo zarejestrowana
odpowied nie jest publikowana natychmiast, lecz najpierw przechodzi przez
proces zatwierdzania, który trwa kilka dni. Na stronie Response Management
mona równie zarzdza wszystkimi wczeniej utworzonymi odpowiedziami.
Mona obejrze ich szczegóy, dokona w nich zmian oraz usun te, które
s ju nieaktualne.

Jak nasza odpowied zostanie przedstawiona uytkownikowi? Nastpnym

razem, gdy nastpi awaria programu, dla której zdefiniowano odpowied ,
zostanie wywietlone okno dialogowe widoczne na rysunku 8.24.

Rysunek 8.24.

Okno dialogowe wyświetlane w przypadku awarii aplikacji,

dla której jest opublikowane rozwiązanie

background image

454

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Jeli uytkownik kliknie przycisk Zamknij program, zostanie wywietlone

powiadomienie, e dla problemu, który wystpi, jest dostpne rozwizanie.
Kliknicie komunikatu spowoduje wywietlenie okna dialogowego zawiera-
jcego tekst rozwizania, jak na rysunku 8.25.

Rysunek 8.25.

Okno dialogowe zawierające treść rozwiązania problemu z aplikacją

W tym przypadku uytkownik moe klikn cze The High-tech Avenue,

które przeniesie go na stron zawierajc szczegóowy opis rozwizania
problemu.

Raportowanie i subskrypcje

Dwie nowe funkcje dodane w usudze WER to raportowanie i subskrypcje.
Subskrypcje umoliwiaj otrzymywanie powiadomie dotyczcych okrelo-
nych zdarze. Aby uzyska dostp do tej funkcji, naley w menu Software
wybra element My Subscriptions. Na rysunku 8.26 przedstawione zostay
ustawienia dostpne w ramach tej funkcji.

Aby aktywowa wybran subskrypcj, naley zaznaczy jej pole wy-

boru. Dodatkowo mona okreli dat (a w niektórych przypadkach take
czstotliwo) wysyania powiadomienia poczt e-mail.

Funkcja raportowania to zestaw standardowych raportów, które mo-

na generowa dla danych przechowywanych w WER. W czasie pisania
tej ksiki dostpny by tylko jeden raport — o nazwie Response Satis-
faction
, który przedstawia ogóln jako odpowiedzi oraz liczb wywie-
tle i wysanych przez uytkowników wyników ankiety. Funkcja rapor-
towania jest stosunkowo nowa i w przyszoci naley si spodziewa
powikszenia liczby raportów.

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

455

Rysunek 8.26.

Opcje subskrypcji

Jak wida, WER to bardzo pomocna usuga umoliwiajca monitorowanie

dziaania aplikacji na komputerach rzeczywistych uytkowników. Moliwo
wysyania przez uytkowników informacji o awariach programu to niezwykle
cenna technologia, która znaczco przyczynia si do zmniejszenia proble-
mów powodowanych przez bdy w programach.

Dostęp do usługi WER z poziomu programu

Usuga Windows Error Reporting jest dla firm znakomitym narzdziem do
monitorowania ich aplikacji na komputerach uytkowników, umoliwiaj-
cym podejmowanie rodków zaradczych w razie wystpienia problemów.
Wystarczy utworzy konto i zarejestrowa swoje produkty, wic z nimi
pliki binarne, aby uzyska dostp do obszernych baz danych na temat bdów
wystpujcych w aplikacjach dziaajcych w realnych warunkach. Jedn
z wad tej usugi jest konieczno regularnego logowania si w witrynie w celu
sprawdzenia, czy pojawiy si nowe informacje o zdarzeniach. Jeli co jest,
mona pobra odpowiadajcy wybranemu zdarzeniu plik .cab, aby dokad-
niej zbada problem. Znacznie lepszym sposobem na monitorowanie
aplikacji poprzez WER jest jednak skorzystanie z udostpnianego przez t
usug API. API usug sieciowych umoliwiaj firmom tworzenie wasnych

background image

456

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

systemów monitorujcych, które automatycznie pobieraj dane o zdarze-
niach z serwera. Warstw dostpu do swoich usug sieciowych zespó WER
opublikowa w serwisie CodePlex (http://www.codeplex.com/). Mona tam
dodatkowo znale  kilka przykadowych projektów (m.in. gadet dla syste-
mu Windows Vista pobierajcy informacje z WER). Ponadto opublikowany
zosta równie zestaw klienta (http://wer.codeplex.com/Release/Project
Releases.aspx?ReleaseId=12825
) udostpniajcy model obiektowy WER,
co znacznie uatwia prac nad wasnymi aplikacjami monitorujcymi. Rysu-
nek 8.27 przedstawia ogólny schemat dziaania usugi WER i modelu klient-
obiekt.

Rysunek 8.27.

Schemat pracy WER i modelu klient-obiekt

Korzystanie z WER zawsze zaczyna si od zalogowania si klienta w sys-

temie za pomoc klasy

Login

. Dane, których uywa si do tego logowania,

to dane uytkownika z uprawnieniami dostpu do konta (np. gównego ad-
ministratora). Jeli logowanie si powiedzie, obiekt logowania najczciej
jest zapisywany w pamici podrcznej aplikacji klienckiej i wykorzystywany
we wszystkich innych dziaaniach WER. Nastpnie aplikacja moe przeliczy
produkty dostpne na koncie (wczeniej poddane wizaniu za pomoc na-

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

457

rzdzia Product Feedback Mapping Tool) i wybra te, które nas interesuj.
Do reprezentowania produktów suy klasa

Product

. Kady egzemplarz

klasy

Product

zawiera zbiór aplikacji odpowiadajcych kademu plikowi

binarnemu powizanemu w procesie wizania. Aplikacj reprezentuje
klasa

ApplicationFile

, która umoliwia uzyskanie szczegóowych in-

formacji o aplikacji. Podobnie jak klasa

Product

gromadzi zestaw aplikacji,

kada aplikacja gromadzi zestaw zdarze (reprezentowanych przez klas

Event

). Kady taki obiekt zdarzenia zawiera szczegóowe informacje, jak

np. typ zdarzenia i zwizane z nim pliki .cab. Klient moe wykorzysta te
informacje na róne sposoby, np. zapisa je w bazie danych albo doda do
systemu automatycznego ledzenia bdów.

Technik integrowania wasnego klienta z usug WER przedstawi na

przykadowej aplikacji konsolowej, która bdzie pobieraa szczegóy okre-
lonego zdarzenia. Kod ródowy tego programu znajduje si na listingu 8.2.

Listing 8.2.

Przykładowa aplikacja pobierająca dane z usługi WER

using System;

using System.IO;

using System.Text;

using System.Runtime.InteropServices;

using Microsoft.WindowsErrorReporting.Services.Data.API;

namespace Advanced.NET.Debugging.Chapter8

{

class WerConsole

{

static void Main(string[] args)

{

WerConsole s = new WerConsole();

s.Run();

}

public void Run()

{

int eventId;

string product, file, cabLoc, userName, password;

Login login;

Console.Write("Podaj nazw uytkownika: ");

userName = Console.ReadLine();

Console.Write("Podaj haso: ");

password = Console.ReadLine();

Console.WriteLine("Logowanie do WER...");

login=WerLogin(userName, password);

Console.WriteLine("Logowanie powiodo si");

background image

458

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

Console.Write("Podaj produkt: ");

product=Console.ReadLine();

Console.Write("Podaj plik: ");

file=Console.ReadLine();

Console.Write("Podaj identyfikator zdarzenia: ");

eventId=Int32.Parse(Console.ReadLine());

Console.Write("Podaj miejsce do zapisywania plików .cab: ");

cabLoc = Console.ReadLine();

if (Directory.Exists(cabLoc) == false)

{

Directory.CreateDirectory(cabLoc);

}

Event e=GetEvent(product, file, eventId, ref login);

Console.WriteLine("Zdarzenie pobrane");

Console.WriteLine("Identyfikator zdarzenia: " + e.ID);

Console.WriteLine("Liczba wystpie zdarzenia: " + e.TotalHits.ToString());

Console.WriteLine("Zapisywanie plików .cab...");

foreach (Cab c in e.GetCabs(ref login))

{

try

{

c.SaveCab(cabLoc, true, ref login);

}

catch (Exception)

{

}

}

Console.WriteLine("Miejsce zapisania plików .cab: " + cabLoc);

}

public Login WerLogin(string userName, string password)

{

Login login = new Login(userName, password);

login.Validate();

return login;

}

public Event GetEvent(string pr,

string fi,

int eventId,

ref Login login)

{

foreach (Product p in Product.GetProducts(ref login))

{

if (p.Name == pr)

{

ApplicationFileCollection ac =

p.GetApplicationFiles(ref login);

foreach (ApplicationFile file in ac)

{

if (file.Name == fi)

{

background image

U

S  U G A R A P O R T O W A N I A B   D Ó W

459

EventPageReader epr=file.GetEvents();

while (epr.Read(ref login) == true)

{

EventReader er = epr.Events;

while (er.Read() == true)

{

Event e = er.Event;

return e;

}

}

}

}

}

}

throw new Exception("Nie znaleziono zdarzenia");

}

}

}

Kod ródowy i plik binarny tego programu znajduj si w nastpujcych

lokalizacjach:

„

Kod ródowy: C:\ADND\Chapter8\WerConsole

„

Plik binarny: C:\ADNDBin\08WerConsole.exe

Na potrzeby tego przykadu zestaw klienta WER (Microsoft.Windows

ErrorReporting.Services.Data.API.dll) zosta zapisany w folderze C:\ADND\
Chapter8\WerConsole
i jest automatycznie zapisywany w folderze C:\ADNDBin
w procesie kompilacji projektu. Najnowsz wersj zestawu klienta WER
mona znale  w witrynie CodePlex pod nastpujcym adresem:

http://wer.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12825

Jak wida na listingu 8.2, jest to prosta aplikacja wiersza polece proszca

na pocztku uytkownika o podanie nastpujcych informacji:

„

Nazwa uytkownika — nazwa uytkownika potrzebna do zalogowania
si w usudze WER.

„

Haso — haso uytkownika okrelonego wczeniej. Naley zwróci
uwag, e wprowadzone haso bdzie widoczne w konsoli.

Po otrzymaniu nazwy uytkownika i hasa aplikacja przekazuje te infor-

macje jako parametry za pomoc metody

Login

. W przypadku powodzenia

metoda ta zwraca egzemplarz klasy

Login

reprezentujcy now sesj WER.

Egzemplarz ten bdzie wykorzystywany w dalszej pracy. Po poczeniu si
z usug WER aplikacja prosi o podanie dodatkowych informacji:

background image

460

R

O Z D Z I A 

8 .

D

E B U G O W A N I E P O A W A R Y J N E

„

Produkt — nazwa interesujcego nas produktu.

„

Plik — interesujcy nas plik aplikacji.

„

Identyfikator zdarzenia — identyfikator interesujcego nas zdarzenia.

„

Miejsce do zapisywania plików .cab — miejsce, w którym maj zosta
zapisane pliki .cab zwizane z okrelonym identyfikatorem zdarzenia.

Po uzyskaniu powyszych informacji klient czy si z usug WER i

szuka zdarzenia. Robi to w nastpujcy sposób:

1.

Szuka okrelonego produktu, przeszukujc wszystkie produkty za-

rejestrowane przez firm (zwizane z uytkownikiem o okrelonej
nazwie).

2.

Szuka okrelonego pliku aplikacji, przeszukujc wszystkie pliki apli-

kacji zwizane z produktem znalezionym w punkcie 1.

3.

Szuka zdarzenia, przeszukujc wszystkie zdarzenia zwizane z plikiem

aplikacji znalezionym w punkcie 2.

4.

Jeli znajdzie zdarzenie, pobiera wszystkie zwizane z nim pliki .cab.

Naley zauway, e we wszystkich wymienionych wyej operacjach,

w których potrzebne jest odwoanie do WER, potrzebny jest równie eg-
zemplarz logowania (tzn. ustalonej sesji) przekazywany jako parametr.

Zobaczmy przykadow sesj dziaania naszego klienta:

C:\ADNDBin>0

08WerConsole.exe

Enter user name: MarioH

Enter password: <password>

Login into WER...

Login succeeded

Enter Product: Advanced .NET Debugging

Enter File: 08SimpleExc.exe

Enter Event ID: 504156229

Enter Location to store CABs: c:\zone\CAB

Event successfully retrieved

Event ID: 504156229

Event Total Hits: 2

Storing CABs...

CABs stored to: c:\zone\CAB

Czas pobierania plików moe by nieco dugi, jeli do pobrania jest duo

plików zawierajcych due iloci informacji. W folderze na pliki .cab znaj-
duj si teraz nastpujce pliki:

C:\ADNDBin>d

dir /B c:\Zone\cab

504156229-CLR20ManagedCrash-0605004230.cab

504156229-CLR20ManagedCrash-0605004408.cab

504156229-CLR20ManagedCrash-0605004551.cab

background image

P

O D S U M O W A N I E

461

504156229-CLR20ManagedCrash-0605004647.cab

504156229-CLR20ManagedCrash-0605004808.cab

504156229-CLR20ManagedCrash-0605004930.cab

504156229-CLR20ManagedCrash-0605005030.cab

504156229-CLR20ManagedCrash-0605005112.cab

504156229-CLR20ManagedCrash-0606022813.cab

504156229-CLR20ManagedCrash-0606025125.cab

Moemy teraz wypakowa pobrane pliki .cab, zaadowa do debugera

odpowiedni plik zrzutu i spróbowa znale  przyczyn problemu za pomoc
technik debugowania poawaryjnego.

Programowy dostp do usugi WER to niezwykle przydatna technologia

umoliwiajca firmom tworzenie wasnych systemów automatycznego mo-
nitorowania aplikacji, które mog bez problemu zintegrowa ze swoimi
systemami ledzenia bdów. Bez trudu mona sobie wyobrazi usug,
która okresowo czy si z WER w celu pobrania do bazy danych nowych
informacji o bdach i która jest zintegrowana z firmowym systemem le-
dzenia bdów. Dziki temu programici s na bieco informowani o b-
dach i mog szybko na nie reagowa.

Podsumowanie

Debugowanie poawaryjne to jedna z najwaniejszych technik w pracy
inyniera oprogramowania. Po dostarczeniu programu do klientów bardzo
trudno jest rozwizywa jakiekolwiek problemy, dlatego posiadanie wiedzy
i moliwo szybkiego oraz precyzyjnego reagowania na bdy s warun-
kiem zminimalizowania kopotów po stronie klienta.

W tym rozdziale dowiedzielimy si, dlaczego czasami konieczne jest

zastosowanie technik debugowania poawaryjnego. Wiemy ju, jakie s po-
trzebne do tego informacje oraz jakie narzdzia su do ich zbierania. Wiemy
równie, jak wykorzysta dane zgromadzone w debugerze, aby rozwiza
zaistniay problem.

Szczegóowo zostaa opisana usuga Windows Error Reporting, która

umoliwia monitorowanie aplikacji w realnych zastosowaniach oraz udostp-
nia informacje o bdach (np. zrzuty awaryjne) zwizanych z poszczególnymi
zdarzeniami i umoliwia zdefiniowanie reakcji na te bdy. Ponadto naj-
nowsze udoskonalenia usugi WER pozwalaj na dostp do niej z poziomu
programów, dziki czemu mona jeszcze lepiej zorganizowa proces kon-
serwacji programu.


Wyszukiwarka

Podobne podstrony:
Techniki diagnostyczne
adobe premiere 6 biblia zaawansowane techniki montażu (helion) fake OCYCGOTBVADD5AIZJNVFVB7K5LDHKD3V
Techniki diagnozy pedagogicznej, Diagnoza pedagogiczna
2 PODSTAWOWE I ZAAWANSOWANE TECHNIKI WYTWARZANIA
zaawansowane techniki wykrywania komputerów w sieci(1) ISIXZ5CHD67VSSQ5QSRNLPUO44BCJ3U7DF6VYYA
Nowoczesne techniki diagnostyki klatki piersiowej
Zaawansowane Techniki Przesłuchiwania[M]
Obserwacja jako technika diagnostyczna ( typy, Obrona - Pedagogika ogólna
Zaawansowane techniki projektowania serwisów Internetowych, 2431, Prace, Informatyka
zajęcia 1 techniki i diagnozy terapii manualnej-druk, terapia manualna
PODSTAWOWE TECHNIKI DIAGNOSTYCZNE W PSYCHOLOGII I PEDAGOGICE, pedagogika specjalna, diagnostyka w pe
Aneks Swobodne Techniki Diagnostyczne - T. Szustrowa, , PSYCHOLOGIA WSFiZ, ,SEM V, DIAGNOZA, ĆWICZEN
Techniki diagnozy i terapii manualnej
Metody i techniki diagnostyczne w swietle badan

więcej podobnych podstron