obsługa błędów w programach i zapobieganie ich występowaniu

31
1 programach i zapobieganie ich występowaniu. Prezentację przygotowali: Łukasz Dryja Witold Święcki Dariusz Tomala

Upload: filipina-pawlak

Post on 03-Jan-2016

32 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Obsługa błędów w programach  i zapobieganie ich występowaniu

1

Obsługa błędów w programach i zapobieganie ich występowaniu.

Prezentację przygotowali:

Łukasz Dryja

Witold Święcki

Dariusz Tomala

Page 2: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 3: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 4: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 5: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 6: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 7: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 8: Obsługa błędów w programach  i zapobieganie ich występowaniu

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ę.

Page 9: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 10: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 11: Obsługa błędów w programach  i zapobieganie ich występowaniu

11

Wyjątki obsługuje się w odpowiednich strukturach, co jest bardziej zorganizowane formą rozwiązywania problemów z aplikacją

Page 12: Obsługa błędów w programach  i zapobieganie ich występowaniu

12

Kod on error

Sub NazwaProcedury    On Error GoTo MiejsceObslugiBledow    Rozkazy procedur    ..................................    Exit Sub

MiejsceObslugiBledow:    Rozkazy obslugi bledow    .........................................    Exit Sub

End Sub

Page 13: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 14: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 15: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 16: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 17: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 18: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 19: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 20: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 21: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 22: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 23: Obsługa błędów w programach  i zapobieganie ich występowaniu

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)

Page 24: Obsługa błędów w programach  i zapobieganie ich występowaniu

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

Page 25: Obsługa błędów w programach  i zapobieganie ich występowaniu

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ć

Page 26: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 27: Obsługa błędów w programach  i zapobieganie ich występowaniu

27

Instrukcje warunkowe. Czasem zagnieżdżenie kilku powoduje, że kod źródłowy przybiera bardziej zorganizowaną formę.

Page 28: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 29: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 30: Obsługa błędów w programach  i zapobieganie ich występowaniu

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.

Page 31: Obsługa błędów w programach  i zapobieganie ich występowaniu

31

Literatura  ”Visual Basic. Net” - autorzy:Duncan Mackenzie , Kent Sharkey

Internet:http://vb4all.canpol.pl/