Upload
filipina-pawlak
View
34
Download
0
Embed Size (px)
DESCRIPTION
Obsługa błędów w programach i zapobieganie ich występowaniu. Prezentację przygotowali: Łukasz Dryja Witold Święcki Dariusz Tomala. Istota błędów. Błędy podczas wykonania programu powodowane są wieloma różnymi przyczynami. Wśród nich można wymienić następujące: - PowerPoint PPT Presentation
Citation preview
1
Obsługa błędów w programach i zapobieganie ich występowaniu.
Prezentację przygotowali:
Łukasz Dryja
Witold Święcki
Dariusz Tomala
2
Istota błędów.
Błędy podczas wykonania programu powodowane są wieloma różnymi przyczynami. Wśród nich można wymienić następujące:
błędy projektowe, błędy kodowania, uszkodzenia sprzętu, niewłaściwe dane itp. Nie jest możliwe przewidzenie wszystkich możliwych błędów, można jednak zaplanować obsługę niektórych z nich.
3
Obowiązkiem programisty jest zapewnienie sposobu informowania o błędach, komunikowania się i (jeżeli to możliwe) poprawiania tych błędów. Można to zrobić przez dołączenie odpowiedniego kodu obsługi błędów w aplikacjach.
4
Rodzaje błędów
Błąd kompilacji - to pomyłka programisty, która łamie zasady składni Visual Basic (błędne napisanie własności lub słowa kluczowego). Visual Basic zwraca uwagę na kilka typów składni w programach.
Visual Basic nie pozwoli na uruchomienie programu, dopóki nie zostaną poprawione wszystkie błędy składni
5
Błąd podczas działania programu – to błąd, który powoduje nieoczekiwane zatrzymanie działania programu. Takie błędy powstają, gdy zewnętrzne zdarzenie lub nie wykryty błąd składni zmusza program do zatrzymania swojego działania, np. błąd w pisowni ładowanego pliku, lub brak dyskietki w stacji dyskietek.
6
Błąd logiczny - błąd człowieka - pomyłka programisty, która powoduje, że kod programu generuje złe wyniki. Większość wysiłków przy usuwaniu błędów koncentruje się na znajdywaniu błędów logicznych wprowadzonych przez programistę. Błędy te są często trudniejsze do zlokalizowania i poprawienia.
7
Jak unikać błędów.
Istnieją dwie główne techniki, które pozwalają na uniknięcie błędów występujących w kodzie źródłowym programu:
Strukturalna obsługa wyjątków Narzędzia do śledzenia przebiegu
programu dostępne w oknie Debug
8
Strukturalna obsługa wyjątków.
Strukturalna obsługa zapewnia obsługę wyjątków sprzętowych i programach.
Oba typy wyjątków traktowane są w taki sam sposób, wobec czego kod źródłowy obsługujący wyjątki ma bardzo prostą i uniwersalną składnię.
9
Strukturalnej obsługi wyjątków zapewnia ochronę programu przed nietypowymi sytuacjami. Obsługa wyjątków nie spowalnia znacznie programu i nie obciąża systemu, ale nie należy zbyt przesadnie korzystać z obsługi wyjątków. Jeśli mamy pewność, że w określonej części programu nie ma możliwości wystąpienia błędów to nie powieliśmy stosować obsługi błędów.
10
Błędy i wyjątki.Po pierwsze, wyjątek jest pewną odmianą błędu, ale
błąd i wyjątek to nie to samo. Wyjątek to nieprawidłowe zachowanie się aplikacji, które może być spowodowane przez wiele różnych czynników. Większość błędów występujących w Visual Basic można obsłużyć za pomocą instrukcji On Error. Ten sposób nie jest strukturalny, więc może powodować niepotrzebne skoki do różnych części kodu źródłowego procedury
11
Wyjątki obsługuje się w odpowiednich strukturach, co jest bardziej zorganizowane formą rozwiązywania problemów z aplikacją
12
Kod on error
Sub NazwaProcedury On Error GoTo MiejsceObslugiBledow Rozkazy procedur .................................. Exit Sub
MiejsceObslugiBledow: Rozkazy obslugi bledow ......................................... Exit Sub
End Sub
13
Obiekt Err Err.Description zawiera wyjaśnienie
sytuacji, która spowodowała błąd.
Err.Number zwraca numer błędu, który można wykorzystać do sprawdzenia rodzaju błędu.
14
Wybrane kody i komunikaty.
3 Return without GoSub
5 Invalid procedure call
6 Overflow
7 Out of memory
9 Subscript out of range
10 This array is fixed or temporarily locked
11 Division by zero
13 Type mismatch
15
Instrukcja Resume.
Resume – pozwala na powtórne wykonywanie operacji zawierającej błąd, a następnie przejście dalej, jeżeli problem nie zostanie naprawiony przez użytkownika.
Resume Next – pomija tę instrukcję i przechodzi do następnego wiersza.
Resume linia – rozpoczyna działanie od numeru linii programu, określonego przez argument linia.
16
Blok Try
Za pomocą bloku Try ... End Try zabezpieczamy odpowiednią cześć programu. Chroniony zestaw instrukcji wpisujemy po słowie kluczowym Try, a kończymy słowami kluczowymi End Try.
17
Składnia bloku Try...End Try
Przykład funkcjiTry
Catch Ex As ExceptionEnd Try
Słowo kłuczowe Try rozpoczyna część kodu, a End Try stanowi zakończenie bloku. Linijka Catch oznacza tę część kodu, która obsługuje ewentualny wyjątek.
18
Sekcja Catch
W każdym bloku Try...End Try występuje jedna lub więcej sekcji Catch. Każda sekcja Catch jest przeznaczona do przechwytywania wyjątków jednego typu. Za pomocą kilku sekcji Catch można przechwytywać wyjątki określonego typu i rozwiązywać z nimi problemy w określony sposób.
19
Przechwytywanie kilku wyjątków
Try3 Catch eNoFilie As FileNotFoundException4 ‘ obsługa wyjątku związanego z nieznalezieniem
pliku5 Catch e10 As IOExcpetion6 ‘ obsługa wyjątku wejścia/wyjścia7 Catch Ex As Exception8 ‘ obsługa pozostałych wyjątków9 End Try
20
Powyższy blok Try...End Try jest przeznaczony do wychwytywania błędów, które mogą występować podczas przetwarzania plików.
W bloku są trzy odzielne sekcje służące do przechwytywania różnych typów wyjątków (FileNotFoundException, IOExpception, i inne wątki). Gdyby w bloku wykorzystano tyko jedna sekcję Catch, to należałoby napisać procedurę określającą typ wyjątku.
21
Przykładowe wyjątkiArgumentException Powstaje, gdy do procedury
jest przesłana nieprawidłowa wartość dana.
ArgumentNullException Występuje, gdy zostanie przesłana wartość Null do funkcji, która jej nie akceptuje.
ArgumentOutRangeException Występuje, gdy do funkcji zostanie przesłana dana o nieprawidłowym rozmiarze, np.: gdy do funkcji akceptującej wartość z zakresu od 1 do 12 prześlemy wartość –1.
DivideByZeroException Występuje, gdy zachodzi próba dzielenia przez zmienną niezainicjowaną lub przechowująca wartość zero.
22
Zagnieżdżanie bloków Try...End TryCzasami istnieje potrzeba ochrony dwóch części
kodu za pomocą bloków Try...End Try w taki sposób, by mieć możliwość niezależnej obsługi wyjątków występujących w poszczególnych częściach kodu. Jeśli mamy do czynienia z dwiema niezależnymi częściami, to po prostu każdą z nich zamykamy w bloku Try...Ed. Try. Jeśli obie części kodu są ze sobą w jakiś sposób powiązane, to trzeba skorzystać z zagnieżdżenia bloków Try...End Try.
23
Sub WriteToFile (ByVal FileName As Strin)Dim fsOut As System.IO.FileStreamDim strOut As System.IO.StreamWriterTry‘ próba otwarcia plikufsOut = _New System.IO.FileStream(FileName, _System.IO.FileMode.OpenOrCreate,_System.IO.FileAccess.Write)
24
Try‘zapis w plikustrOut = _New System.IO.StreamWriter(fsOut)strOut.Write(Datetime.Today.ToString())Catch eIO As ExceptionConsole.WriteLine(‘’ ‘ nie można zapisać w pilku: {0}.”, FileName)End TryCatch eFile As ExceptionConsole.WriteLine(‘’ nie można otworzyć pliku: {0}.”, Filename)End TryEnd Sub
25
W tym przykładzie użyto dwóch bloków Try ... End Try. Jeden z nich (rozpoczynający się w linii 10.) jest w całości umieszczony w drugim bloku. Wewnętrzny blok nazywamy blokiem zagnieżdżonym w bloku zewnętrznym. Jeśli wystąpi wyjątek związany z zapisem do pliku 14., a użytkownik zobaczy na ekranie komunikat: „Nie można zapisać w pliku: SomeFile.Out.” Jeśli plik nie może zostać
26
otwarty, to wyjątek zostanie wyłapany przez instrukcję Catch z lini 18., a użytkownik zobaczy informację: „Nie można otworzyć pliku: SomeFile.Out”.
Sposób działania zagnieżdżonych bloków Try ... End Try jest bardzo podobny do działaniazagnieżdżonych instrukcji warunkowych If ... End If. Bloki możemy zagnieżdżać bez ograniczeń, podobnie jak
c.d.
27
Instrukcje warunkowe. Czasem zagnieżdżenie kilku powoduje, że kod źródłowy przybiera bardziej zorganizowaną formę.
28
Sekcja Finally
Gdy korzysta się z bloków Try, trzeba czasem zapewnić wykonanie określonego zadania, niezależnie od wystąpienia określonego błędu. Na przykład, podczas operacji zapisu danych w pliku należy bezwzględnie plik zamknąć po zapisie, niezależnie od tego, czy wystąpiły błędy, czy nie. Wykonanie określonego zadania, niezależnie od wystąpienia błędów podczas pracy programu, umożliwia sekcja Finally.
29
Tę sekcję wpisujemy pod sekcjami Catch. W bloku Finally umieszczamy często instrukcje zamykające plik, przypisujące zmiennej wartość Nothing, i inne instrukcje „czyszczące” program. Przykładowy kod źródłowy z sekcją Finally przedstawiono na listingu.
30
Podsumowanie
Wszystkie programy zawierają błędy. Czasem błędy powoduje użytkownik korzystający z programu w nieodpowiedni sposób. Aby uniknąć, należy przeanalizować działanie programu i uodpornić go na większość zdarzeń powodujących powstanie błędu. Najważniejszym zadaniem dla programisty jest ochrona przed utratą danych.
31
Literatura ”Visual Basic. Net” - autorzy:Duncan Mackenzie , Kent Sharkey
Internet:http://vb4all.canpol.pl/