Презентація "Опрацювання помилок"

Попередній слайд
Наступний слайд


Завантажити презентацію "Опрацювання помилок"
Слайд #1
1
Опрацювання помилок


Слайд #2
2
Типи помилок
Помилки, що виникають у комп'ютерній програмі, можуть бути поділені на три основних типа: Design-time (під час проектування), Runtime (під час виконання) і Logic (логічні).
Design-time помилки найлегше виявити і виправити. Такого роду помилки виникають при написанні фрагментів коду, який не задовольняє правилам тієї мови, на якій вони пишуться. Їх легко знайти, тому що Visual Studio .NET не тільки вказує на область їх виникнення, але і на конкретний вираз.


Слайд #3
3
Типи помилок
Runtime помилки знайти складніше, тому що VS не дає ніякої допомоги у їх виявленні до безпосереднього виникнення їх у програмі. Вони виникають при спробі виконати недопустиму дію, наприклад, отримати доступ до даних, яких не існує, або до ресурсів, до яких додаток не має прав доступу. При виникненні такого роду помилок, якщо вони не будуть опрацьовані належним чином, додаток може завершитися крахом, або зависнути.
Третій тип помилки, логічні, є найбільш небезпечними і складними у виявленні, тому що вони не дають ніякого впливу на працездатність додатку. Наявність у програмі логічних помилок означає тільки те, що ви будете отримувати неправильні результати від роботи програми. Це можуть бути найпростіші помилки при невірній калькуляції, або пункт меню, який ви забули встановити у положення disabled і т.д.


Слайд #4
4
Виключення
Runtime помилки в Visual Basic .NET викликають виключення. Виключення – це реакція на помилку, згенеровану додатком. При виникненні виключення з'являється діалог, який сповіщає про помилку з додатковою інформацією. Цей діалог дає можливість користувачу продовжити виконання програми. В рідких випадках це може бути корисним, але частіше за все це не бажано. Продовження виконання програми може посприяти невиправним помилкам, наприклад записати у базу даних невірних (помилкових) даних.


Слайд #5
5
Приклад помилки
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim s As String
s = "студент"
Button2.Text = s.Substring(10, 1)
End Sub
Цей код намагається відобразити одинадцятий символ рядка s (у рядку тільки 7 символів).


Слайд #6
6
Характеристика помилки
Буде виведене таке повідомлення:
An unhandled exception of type System.ArgumentOutOfRangeException’ occurred inmscorlib.dll Additional information: Index and length must refer to a location within the string.
Перше, що допомагає нам впевнитися у тому, що це runtime помилка – це слово unhandled. Це означає, що помилка була у рядку, що не входить у блок оброблювача виключень.
Ще один цікавий момент, це тип виключення System.ArgumentOutOfRangeException. Важливо знати те, що різні типи помилок поділяються на групи. Це важливо, коли ви реалізуєте механізм опрацювання помилок.
Блок “Additional information” («додаткова інформація»), дає нам деяку специфічну інформацію про природу виникнення помилки.


Слайд #7
7
Опрацювання виключень
Опрацювання помилки з попереднього прикладу:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim s As String
s = "студент"
Try
Button2.Text = s.Substring(10, 1)
Catch
Button2.Text = "error"
End Try
End Sub


Слайд #8
8
Пояснення до опрацювання виключень
Це той самий код, але вираз, який приводить до помилки розміщено у блоці опрацювання виключень Try…Catch…End Try.
Цей блок є прикладом найпростішого оброблювача виключень. Якщо у блоці Try генерується виключення, то програма автоматично переходить у блок Catch.
Якщо ніяких виключень не генерується, то програма пропускає блок Catch. При виконанні цього коду, виникає виключення System.ArgumentOutOfRangeException, але програма продовжує виконуватись і не показує ніяких повідомлень. Після виконання властивість Text кнопки Button2 буде мати значення "error".


Слайд #9
9
Використання об'єкта ех
Private Sub Button2_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button2.Click
Dim s As String
s = "студент"
Try
Button2.Text = s.Substring(10, 1)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Тут виключення генерує об'єкт ех класу Exception. Він дозволяє отримати повну інформацію про виключення. Замість MsgBox у реальній програмі можна вести журнал помилок (LogFile).


Слайд #10
10
Опрацювання помилки визначеного типу
У прикладі виконується спроба вибрати елемент із ListBox’у lbStates. Якщо у lbStates не вибрано жодного елемента, то генерується виключення System.NullReferenceException.
Private Sub Button3_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button3.Click
Try
Button3.Text = lbStates.SelectedItem.ToString Catch ex As System.NullReferenceException
MsgBox("Будь ласка оберіть тему доповіді")
Catch ex As Exception
MsgBox("Some other error: " & ex.Message)
End Try
End Sub


Слайд #11
11
Пояснення до прикладу
Це виключення опрацьовується спеціальним обробником, який викликає MsgBox із відповідним повідомленням ("Будь ласка оберіть тему доповіді").
Якщо відбудеться виключення якогось іншого типу, то воно буде опрацьовано іншим оброблювачем.Зазначте, що в попередньому коді оброблювач специфічного типу виключень розташований перед оброблювачем загального типу. Це визначає послідовність обробки виключень.
Також зазначте, що об'єкт ex присутній в кожному оброблювачі. Це є можливим, тому що, ця об'ява є локальною, і область видимості цього об'єкту обмежена відповідним блоком Catch.


Слайд #12
12
Блок Finally
У процесі використання структури обробки виключень Try…Catch…End Try виключення обробляється першим релевантним обробником. Після цього програма залишає рамки цієї структури.
Іноді потрібно виконати який-небудь код , перед виходом із структури Try…Catch…End Try Наприклад, в наступній програмі зчитується файл і рядок за рядком завантажується до ListBox. Якщо виникає виключення у циклі, то неможливо закрити Streamreader (викликати s.Close()), що може привести до непотрібної втрати ресурсів. Для цього існує спеціальний блок, код якого буде виконаний в будь-якому випадку. Цей блок називається Finally.


Слайд #13
13
Приклад використання Finally
Protected Sub ReadFromATextFile(ByVal cFilename As String) Dim s As StreamReader
Dim cLine As String
Dim bDone As Boolean = False
lbresults.Items.Clear()
s= New Streamreader(cFilename)
Try
While Not bDone
cLine = s.ReadLine()
If cLine Is Nothing Then
bDone = True
Else
lbresults.Items.Add(cLine)
End If
End While
s.Close()
Catch ex As Exception
MsgBox("some error occurred")
Finally
s.Close()
End Try
End Sub
Тепер в будь-якому випадку Streamreader закриється і ресурси вивільняться.


Слайд #14
14
Виклик виключень
У процесі створення власних класів виникає необхідність виклику виключень. Для цього використовується ключове слово Throw. Розробник, що використовує ваш клас, зможе обробляти це виключення. Приклад виклику (спрацьовування виключень)


Слайд #15
15
Виклик виключень
Private FValue As Integer = 0
Property Value() As Integer
Get
Return FValue
End Get
Set(ByVal iValue As Integer)
If iValue <= FMax Then
FValue = iValue
Else
FValue = FMax
Throw New OverflowException(“Не можна встановити значення ProgressBar більше максимально можливого.”)
End If
Invalidate()
End Set
Тут викликається виключення  OverflowException з вашими коментарями.