[ Pobierz całość w formacie PDF ]
.Aby wyœwietliæ okno dziennikazdarzeñ, wybierz polecenie menu View½Debug Windows½Event Log.Na rysunku 10.12przedstawione zosta³o okno dziennika zdarzeñ w trakcie procesu testowaniaaplikacji.Okno dziennika zdarzeñ posiada w³asne menu kontekstowe umo¿liwiaj¹cewyczyszczenie dziennika, zapisanie go do pliku tekstowego lub dodaniekomentarza.Zapisanie dziennika do pliku u³atwia jego przegl¹danie lubposzukiwanie okreœlonego tekstu.Polecenie Properties umo¿liwia dostosowanieokna dziennika zdarzeñ do w³asnych potrzeb.Okno ustawieñ dziennika zdarzeñwygl¹da identycznie jak strona Event Log w oknie Debugger Options (omawianadalej w sekcji „Strona Event Log”).Rysunek 10.12.Okno dziennika zdarzeñJedna z funkcji Windows API – OutputDebugString (omawiana w sekcji „FunkcjaOutputDebugString”) umo¿liwia wys³anie w³asnego komunikatu do dziennikazdarzeñ.Okno modu³Ã³wOkno modu³Ã³w (Modules) pokazuje nazwy za³adowanych aktualnie modu³Ã³w,do³¹czonych do nich plików kodu Ÿród³owego, a tak¿e symboli (funkcji, proceduri zmiennych) wyeksportowanych z okreœlonego modu³u.W celu otwarcia okna nale¿ywybraæ polecenie menu View½Debug Windows½Modules.Okno modu³Ã³w jest niezwyklezaawansowanym narzêdziem, dlatego szczegó³y jego dzia³ania nie bêd¹ tutajomawiane.Wskazane jest, abyœ poœwiêci³ trochê czasu na eksperymenty z tymoknem, aby przekonaæ siê jak ono dzia³a.Rysunek 10.13 przedstawia okno modu³Ã³ww dzia³aniu.Rysunek 10.13.Okno modu³Ã³w w dzia³aniuTechniki wykrywania b³êdówPrzy okazji omawiania zagadnieñ zwi¹zanych z debuggerem œrodowiska IDEwspomnianych zosta³o kilka technik wykrywania b³êdów.Teraz omówimy jeszczekilka dodatkowych sposobów, które u³atwi¹ Ci pracê w trakcie poszukiwaniab³êdów.Funkcja OutputDebugStringCzasami pomocne mo¿e okazaæ siê obserwowanie zachowania siê programu w trakciejego pracy.Innym razem chcesz œledziæ wartoœci zmiennych bez potrzebyzatrzymywania programu w punktach przerwañ.W³aœnie do tego celu s³u¿y funkcjaOutputDebugString, bêd¹ca doskona³ym narzêdziem w procesie wykrywania b³êdów,czêsto nie zauwa¿anym przez programistów – g³Ã³wnie ze wzglêdu na brak dyskusjina jej temat.Spójrz na ostatni wpis do dziennika zdarzeñ na rysunku 10.12;wpis ten powsta³ na skutek nastêpuj¹cego fragmentu kodu:OutputDebugString(‘Wnêtrze metody Button1Click.’);Poniewa¿ Delphi jest zainstalowane jako debugger systemowy, wszelkie ³añcuchygenerowane przy u¿yciu funkcji OutputDebugString bêd¹ pojawiaæ siê w dziennikuzdarzeñ.Wywo³ania tej funkcji mog¹ pojawiaæ siê w dowolnych miejscach koduŸród³owego.Aby wyœwietliæ wartoœæ zmiennej, wczeœniej trzeba przetworzyæ j¹ na ³añcuch iprzekazaæ w takiej postaci funkcji OutputDebugString.Przyk³ad:procedure TForm1.FormCreate(Sender : TObject);varX : Integer;S : string;begin{Dowolny fragment kodu.}S:=Format(‘X:= %d’, [X]);OutputDebugString(PChar(S));end;Dziêki funkcji OutputDebugString mo¿na obserwowaæ zachowanie siê programu nawetw przypadku sekcji kodu silnie uwarunkowanych czasowo.Œledzenie b³êdów naruszenia ochrony dostêpuB³¹d naruszenia ochrony dostêpu jest generowany przez Windows, gdy programpróbuje zapisaæ coœ do fragmentu pamiêci, który do niego nie nale¿y.B³êdy tegotypu napotykaj¹ wszyscy programiœci w trakcie prac nad aplikacjami Windows.B³êdy naruszenia ochrony dostêpu s¹ trudne do wyœledzenia, zarówno dlapocz¹tkuj¹cych, jak i zaawansowanych programistów Windows.W miarê rozwijaniaswoich umiejêtnoœci, wielu programistów zyskuje szósty zmys³ wykrywaniaprzyczyny powstawania tego typu b³êdów.Poni¿ej znaleŸæ mo¿na kilka wskazówek,którymi nale¿y kierowaæ siê przy wyszukiwaniu nieuchwytnych b³êdów naruszeniaochrony.Nie s¹ to jedyne sytuacje powoduj¹ce w efekcie za³amanie siê programu,ale ich wystêpowanie jest najczêstsze.Niezainicjowane wskaŸnikiNiezainicjowany wskaŸnik to zadeklarowany wskaŸnik, który posiadaj¹cprzypadkow¹ wartoœæ nie wskazuje ¿adnego konkretnego obiektu w programie(mówi¹c inaczej – wskazuje na losowy fragment danych.) W najlepszym przypadkuwskaŸnik taki pokazuje na nieu¿ywany fragment pamiêci.W najgorszym przypadkuniezainicjowany wskaŸnik wskazuje na fragment pamiêci gdzieœ w Twoim programie.Sytuacja taka mo¿e prowadziæ do niekonsekwentnego zachowania siê programu przyka¿dym jego uruchomieniu.Przed pierwszym u¿yciem wskaŸnika, a tak¿e pousuniêciu obiektu na który wskazuje, przypisuj mu wartoœæ nil.Próba odwo³aniasiê do wskaŸnika zawieraj¹cego wartoœæ nil spowoduje zatrzymanie programu zb³êdem naruszenia ochrony, jednak tym razem linia kodu Ÿród³owego, którawywo³a³a b³¹d, zostanie podœwietlona przez debugger umo¿liwiaj¹c szybk¹identyfikacjê problemowego wskaŸnika.Usuwanie nieistniej¹cych ju¿ wskaŸnikówUsuniêcie wskaŸnika, który zosta³ usuniêty ju¿ wczeœniej, owocuje b³êdemnaruszenia ochrony.Zastosowanie znajduje tutaj rada udzielona w przypadku niezainicjowanychwskaŸników: ustawiaj usuniête wskaŸniki na wartoœæ nil.Usuniêcie wskaŸnikazawieraj¹cego nil jest ca³kowicie bezpieczne
[ Pobierz całość w formacie PDF ]