vbnet.pdf

(231 KB) Pobierz
307351668 UNPDF
Rozdzia³ 8
Usuwanie b³êdów z programów
Czêœæ II
Podstawy programowania
Rozdzia³ 8
Usuwanie b³êdów z programów
W tym rozdziale:
Ró¿ne typy b³êdów, jakie mog¹ wystêpowaæ w programach.
Narzêdzia œrodowiska Visual Studio .NET s³u¿¹ce do debugowania.
Zastawianie pu³apek w postaci punktów przerwañ.
Œledzenie zmiennych za pomoc¹ czujek.
Zmienianie wartoœci zmiennych i wykonywanie poleceñ za pomoc¹
okna komend.
W kilku ostatnich rozdzia³ach mia³eœ mnóstwo okazji, by pope³niaæ
b³êdy w kodzie. Komunikacja miêdzy programist¹ a kompilatorem Vi-
sual Basic musi jednak odbywaæ siê bezb³êdnie – inaczej ni¿ miêdzy
dwoma ludŸmi, kiedy wystêpowanie pojedynczych b³êdów gramatycz-
nych czy niewyraŸnie wypowiedzianych s³ów jest do zaakceptowania.
Komputer wymaga precyzyjnego stosowania regu³ i przestrzegania
przepisów Visual Basica. W tym rozdziale poznasz ró¿ne typy b³êdów,
które zdarzaj¹ siê w programach. Dowiesz siê tak¿e, jak za pomoc¹ na-
rzêdzi do debugowania z pakietu Visual Studio .NET wykrywaæ i popra-
Uwagi dotycz¹ce aktualizacji:
Co nowego w œrodowisku Visual Basic .NET?
Jeœli u¿ywa³eœ ju¿ jêzyka Visual Basic 6, zauwa¿ysz w wersji Visual
Basic .NET pewne nowe mo¿liwoœci, miêdzy innymi:
Visual Basic .NET zawiera kilka nowych narzêdzi do znajdowania
i korygowania b³êdów. Do Visual Studio .NET nale¿y wiele zna-
nych z pakietu Visual Basica 6 poleceñ do debugowania ( Start , Bre-
ak , End , Next , Step Into , Step Over ), ale jest tu te¿ kilka nowych
narzêdzi i komend do zarz¹dzania procesami i wyj¹tkami oraz na-
rzêdzi obs³uguj¹cych debugowanie aplikacji wielojêzykowych.
Kilka nowych okien do debugowania zosta³o dodanych do inter-
fejsu u¿ytkownika Visual Studio .NET. S¹ to miêdzy innymi: Au-
tos (czujki automatyczne), Command (komenda), Call Stack (stos
wywo³añ), Threads (w¹tki), Memory (podgl¹d pamiêci), Disas-
sembly (dezasemblacja) i Registers (rejestry). Nie bêd¹ one na
pewno u¿ywane w ka¿dej sesji debugowania, ale mog¹ okazaæ siê
przydatne w bardziej zaawansowanych aplikacjach.
307351668.003.png
210 Czêœæ II Podstawy programowania
wiaæ te b³êdy. Wiedza ta oka¿e siê przydatna, kiedy bêdziesz ekspery-
mentowaæ z ró¿nymi programami z tego podrêcznika oraz pisaæ w³asne
d³u¿sze programy (w przysz³oœci).
Znajdowanie i usuwanie b³êdów
Defekty, które napotka³eœ dotychczas w swoich programach, sprowa-
dza³y siê prawdopodobnie do prostych b³êdów pisowni i sk³adni. Co ro-
biæ, jeœli natrafimy na powa¿niejszy b³¹d w programie – taki, którego nie
mo¿na znaleŸæ i poprawiæ przez proste przejrzenie obiektów, w³aœci-
woœci i instrukcji? Œrodowisko Visual Studio .NET zawiera wiele narzê-
dzi, które pomagaj¹ przy wyszukiwaniu i poprawianiu b³êdów. Narzê-
dzia te nie zapobiegaj¹ powstawaniu b³êdów, ale u³atwiaj¹ ¿ycie w przy-
padku ich wyst¹pienia.
Edytor kodu
oznacza
niepoprawne
instrukcje
niebiesk¹ falist¹
lini¹.
Trzy typy b³êdów
W programie Visual Basic mog¹ wyst¹piæ b³êdy trojakiego rodzaju:
b³êdy sk³adniowe, b³êdy czasu wykonywania i b³êdy logiczne.
B³¹d sk³adniowy ( b³¹d kompilacji ) jest pomy³k¹ (na przyk³ad niepra-
wid³owo zapisan¹ nazw¹ w³aœciwoœci), która narusza regu³y Visual
Basica. Œrodowisko potrafi wskazaæ kilka typów b³êdów sk³adnio-
wych w programach na etapie pisania kodu i nie pozwala uruchomiæ
programu, zanim b³¹d nie zostanie usuniêty.
B³¹d czasu wykonywania powoduje nieoczekiwane przerwanie dzia³a-
j¹cego ju¿ programu. B³êdy takie wystêpuj¹, gdy jakieœ zdarzenie ze-
wnêtrzne lub niewykryty b³¹d sk³adniowy zmusi program do za-
trzymania. B³¹d czasu wykonywania pojawi siê na przyk³ad wtedy,
gdy Ÿle wpiszesz nazwê programu w metodzie System.Dra-
wing.Image.FromFile lub spróbujesz odczytaæ dyskietkê ze stacji
niezawieraj¹cej dyskietki.
B³¹d logiczny to inaczej b³¹d algorytmu – pomy³ka skutkuj¹ca uzyski-
waniem nieprawid³owych b¹dŸ fa³szywych wyników. Wiêkszoœæ
czynnoœci debugowania wi¹¿e siê ze œledzeniem b³êdów logicznych
wprowadzonych przez programistê.
Jeœli napotkasz b³¹d sk³adniowy, czêsto mo¿esz rozwi¹zaæ problem
dziêki systemowi pomocy online, który oferuje informacje dotycz¹ce ko-
munikatów o b³êdach. B³¹d sk³adniowy mo¿na usun¹æ, zwracaj¹c bacz-
n¹ uwagê na prawid³ow¹ sk³adniê funkcji, obiektów, metod i w³aœciwo-
œci. W edytorze kodu b³êdne instrukcje s¹ oznaczone niebiesk¹ falist¹
lini¹. Wiêcej informacji na temat podkreœlenia mo¿na odczytaæ z etykiet-
ki, która pojawia w chwilê po najechaniu na liniê wskaŸnikiem myszy.
Poni¿sza instrukcja pokazuje komunikat o b³êdzie, który pojawia siê
w Visual Studio w przypadku nieprawid³owego wpisania s³owa Case
( Csae zamiast Case ). Wpisz b³êdne s³owo, usuñ z niego kursor, ¿eby poja-
Rozdzia³ 8
Usuwanie b³êdów z programów
211
wi³a siê falista linia, i najedŸ na nie wskaŸnikiem myszy. Zostanie wy-
œwietlony komunikat w etykietce.
B³êdy sk³adniowe s¹ rozpoznawane przez kompilator Visual Basica
ju¿ na etapie wpisywania programu w edytorze kodu.
B³êdy czasu
wykonywania
wymagaj¹
poprawienia
kodu lub
rozbudowanej
obs³ugi b³êdów.
B³¹d czasu wykonywania mo¿na czêsto poprawiæ przez zmianê kodu
programu. Jeœli na przyk³ad do obiektu pola rysunku ³adowana jest nie-
poprawnie mapa bitowa, powodem b³êdu mo¿e byæ po prostu niepo-
prawnie zapisana œcie¿ka. Jest to jednak przyk³ad trywialny. Szkoda, ¿e
nie wszystkie b³êdy czasu wykonywania s¹ tak prozaiczne. Wiele z nich
wymaga g³êbszej ingerencji – strukturalnej obs³ugi wyj¹tków, któr¹ sta-
nowi specjalny blok kodu uruchamiany w przypadku pojawienia siê
b³êdu czasu wykonywania. Blok ten mo¿e „obejœæ” b³êdne miejsce w
programie przez skorygowanie warunków panuj¹cych w programie na
takie, które nie bêd¹ powodowa³y ponownych b³êdów. Nowa sk³adnia
strukturalnej obs³ugi wyj¹tków omówiona jest w rozdziale 9.
Proces
znajdowania
i poprawiania
b³êdów
w programie
nazywa siê
debugowaniem .
Identyfikowanie b³êdów logicznych
B³êdy logiczne w programach czêsto trudno usun¹æ. S¹ one skutkiem
b³êdnego rozumowania i planowania, a nie nieporozumieniem wyni-
kaj¹cym z literówki. Rozwa¿ nastêpuj¹c¹ instrukcjê If...Then, która bada
dwa wyra¿enia warunkowe i wyœwietla jeden z komunikatów w zale¿-
noœci od wyniku:
If Age > 13 And Age < 20 Then
TextBox2.Text = "You're a teenager"
' jesteœ nastolatkiem
Else
TextBox2.Text = "You're not a teenager"
' nie jesteœ nastolatkiem
End If
307351668.004.png
 
212 Czêœæ II Podstawy programowania
Uwaga W krajach angielskojêzycznych nastolatek to osoba maj¹ca od
13 do 19 lat w³¹cznie, a to ze wzglêdu na fakt, i¿ koñcówkê „-naœcie”
(- teen ) maj¹ liczebniki od 13 do 19 ( thirteen , fourteen , ... nineteen ). Koñców-
ki tej nie maj¹ liczebniki jedenaœcie ( eleven ) i dwanaœcie ( twelve ). Teenager
to po angielsku nastolatek ( przyp. t³um. ).
Czy widzisz b³¹d? Powy¿sza instrukcja niepoprawnie kwalifikuje osoby
maj¹ce równo 13 lat (dla takiego wieku instrukcja generuje komunikat
„Nie jesteœ nastolatkiem”). Ten typ b³êdu nie wynika ze sk³adni (instruk-
cje s¹ zapisane poprawnie). Przyczyn¹ jego jest niestaranne opracowanie
warunku. Poprawna wersja wygl¹da tak:
If Age >= 13 And Age < 20 Then
Trudno uwierzyæ, ale ten typ b³êdu nale¿y do najczêœciej pope³nianych
w programach Visual Basica. Mamy tutaj kod dzia³aj¹cy poprawnie
w wiêkszoœci przypadków, ale nie we wszystkich. W takiej sytuacji naj-
trudniej trafiæ z diagnoz¹.
Podstawy debugowania, czyli tryb œledzenia
Jednym ze sposobów wyszukiwania b³êdu logicznego jest wykonywa-
nie kodu programu wiersz po wierszu i sprawdzanie zawartoœci zmien-
nych oraz ich zmian w wyniku dzia³ania pojedynczych instrukcji. Po-
zwala na to tryb œledzenia , do którego mo¿na przejœæ w trakcie dzia³ania
programu. W trybie tym mo¿liwe jest ogl¹danie kodu w edytorze. To tak
jakby siedzieæ w kokpicie samolotu i obserwowaæ wszystkie poczynania
pilotów, a nawet samemu chwytaæ za stery.
Podczas debugowania aplikacji trzeba u¿ywaæ paska narzêdzi Debug
(usuwanie b³êdów) – specjalnego paska z przyciskami s³u¿¹cymi wy³¹cz-
nie do œledzenia b³êdów. Pasek ten mo¿na zobaczyæ na poni¿szej ilustra-
cji. Mo¿na go otworzyæ, klikaj¹c polecenie Debug z menu View (widok).
Break All (przerwij wszystko)
Step Out (wyjdŸ z procedury)
Hexadecimal Display (wyœwietlanie
w systemie szesnastkowym)
Start
Restart (uruchom ponownie)
Stop Debugging (przerwij debugowanie)
Breakpoints (punkty przerwañ)
Show Next Statement (poka¿ kolejn¹ instrukcjê)
Step Over (wykonaj krokowo
bez wchodzenia do procedur)
Step Into (wykonaj krokowo z wchodzeniem do procedur)
Tryb œledzenia
umo¿liwia
kontrolowanie
wykonywania
programu
instrukcja po
instrukcji.
307351668.005.png 307351668.001.png
Rozdzia³ 8
Usuwanie b³êdów z programów
213
W poni¿szym æwiczeniu ustawisz punkt przerwania, a potem, pracuj¹c
w trybie œledzenia, znajdziesz i usuniesz b³¹d logiczny wykryty wcze-
œniej w instrukcji If...Then (b³¹d jest zawarty w programie). Aby wyizolo-
waæ problem, bêdziesz uruchamiaæ program krokowo za pomoc¹ przy-
cisku Step Into (wykonaj krokowo) z paska Debug . Za pomoc¹ okna
Autos (czujki automatyczne) bêdziesz sprawdzaæ wartoœci kluczowych
zmiennych programu i w³aœciwoœci. Przyjrzyj siê uwa¿nie tym techni-
kom. Mog¹ one okazaæ siê przydatne w wielu twoich póŸniejszych pro-
jektach.
przycisk Start
(uruchom)
Analizowanie programu Debug Test
1. Uruchom Visual Studio.
2. Wybierz z menu File (plik) polecenie Open (otwórz) i kliknij opcjê
Project (projekt).
Otworzy siê okno dialogowe Open Project (otwórz projekt).
3. Otwórz projekt Debug Test (test debugowania) z folderu c:\vbnetsbs\
chap08\debug test.
Projekt zostanie otwarty w œrodowisku programowania.
4. Jeœli formularz nie jest widoczny, wyœwietl go.
Program Debug Test pyta u¿ytkownika o wiek. Kiedy u¿ytkownik
kliknie przycisk Test , program informuje u¿ytkownika, czy jest na-
stolatkiem. Program ma wspomniany wczeœniej w rozdziale pro-
blem z 13-latkami. Otworzysz teraz pasek Debug i ustawisz punkt
przerwania, aby znaleŸæ problem.
5. Jeœli pasek Debug nie jest widoczny, kliknij menu View (widok),
wska¿ polecenie Toolbars (paski narzêdzi), a potem kliknij opcjê Debug .
Pasek Debug pojawi siê pod paskiem Standard .
6. Kliknij przycisk Start (uruchom) na pasku Debug .
Program zostanie uruchomiony i wyœwietli formularz Debug Test.
7. Usuñ 0 z pola do wpisywania wieku, wpisz 14 , po czym kliknij przy-
cisk Test .
Program wyœwietli komunikat „You're a teenager”. Jak dot¹d pro-
gram podaje wynik poprawny.
8. Wpisz 13 w polu do wpisywania wieku i kliknij przycisk Test .
Program wyœwietli komunikat „You're not a teenager”, jak pokaza-
no na rysunku:
307351668.002.png
Zgłoś jeśli naruszono regulamin