Visual Basic Debugging and Error Handling
Transkrypt
Visual Basic Debugging and Error Handling
Visual Basic Debugging and Error
Handling
Typy błędów
1. Compile-Time, (wykrywane w czasie kompilacji – np. błąd w składni)
2. Run-Time, (pojawiające się podczas wykonywania programu, np. zły typ
danych w instrukcji przypisania albo dzielenie przez zero)
3. Logical, (pojawiające się przy niepoprawnej logice programu, np. złe
uwarunkowanie pętli)
Debbuger w Visual Basic
Narzędzie to umożliwia śledzenie wykonania programu krok po kroku. Okienko z
narzędziami Debbugera można uzyskać z menu
Panel intermediate
Wartości zmiennych lub komentarze można wypisywać na konsolę za pomocą
polecenia Print np.
Print Me.Left
To samo można zrobić za pomocą obiektu Debug:
Debug.Print Me.ScaleWidth - shpBall.Left + shpBall.Width
Metoda Assert obiektu Debug pozwala przerwać wykonywanie programu (i przejść
do trybu śledzenia) jeśli zadany warunek nie będzie spełniony:
Debug.Assert shpBall.Left + shpBall.Width & Me.ScaleWidth
Pułapki (Breakpoints) oraz podglądy (Watches) umożliwiają deklarację miejsc, w
których program powinien się zatrzymać w trybie śledzenia, oraz deklarację
zmiennych, których wartości powinny być obserwowane podczas śledzenia.
Pułapka
Ustawia się w kodzie programu przez kliknięcie na margines po lewej stronie lub
przez użycie komenty “Toggle Breakpoint”
Śledzenie krokowe
Odbywać się może z wchodzeniem do wnętrza procedur lub z wykonywaniem ich w
całości (Step Into oraz Step Over). Będąc we wnętrzu procedury można ją opuścić za
pomocą komendy Step Out.
Okienko wartości lokalnych zmiennych
Wyświetlane są w nim nazwy zmiennych, ich wartości oraz typy.
[D]3
Okienko podglądu
Zmienne podglądane dodaje się do tego okienka przez kliknięcie prawym klawiszem
na danej zmiennej i wybranie "Add Watch" lub przez wywołanie "Add Watch" z menu
"Debug".
[D]4
“Add Watch” może również posłużyć do określenia warunku przerwania programu w
trybie śledzenia. W tym celu należy wybrać jedną z opcji : Break When Value Is True,
Break When Value Changes.
Podgląd szybki (Quick Watch)
Wystarczy podświetlić nazwę zmiennej oraz wybrać "Quick Watch" z menu "Debug",
aby podglądnąć wartość zmiennej w danej chwili
Okno wywołań na stosie (Call Stack)
Wyświetla listę nieskończonych jeszcze procedur w kolejności ich wywołania. Aby je
otworzyć, należy wybrać "Call Stack" z menu "View" lub przez kliknięcie na klawiszu
"Locals" okienka "Call Stack".
Pułapkowanie błędów
Do ustawienie pułapkowania błędów w VB 6 stosuje się wyrażenie On Error.
W VB.Net korzysta się z metod Try oraz Catch (aby wyeliminować wyrażenie GoTo)
On Error (Go To) ustawia się przed miejscem, w którym spodziewany jest błąd w
jakiej procedurze.
Zanim pojawi się kod z obsługą błędów pojawić się powinno wytrażenie
"Exit Sub" (aby nie wykonywać obsługi błędu, kiedy on nie wystąpił)
Obiekt Err istnieje w zasięgu globalnym i zawiera stan błędów, które mogły wystąpić.
Własność Number oddaje numer błędu, własność Description jest opisem błędu
Private Sub drvList_Change()
On Error GoTo driveError
dirList.Path = drvList.Drive
Exit Sub
driveError:
MsgBox Err.Description, vbExclamation, "Drive Error"
End Sub
Wyrażenie Resume
Resume pozwala określić, do którego miejsca powinno wrócić sterowanie
wykonaniem programu. Miejsce to może być określone etykietą, albo wyrażeniem
Next.
W przypadku Next wykonywanie programu będzie kontynuowane począwszy od
wyrażenie następującego po wyrażeniu powodującym błąd
Private Sub drvList_Change()
On Error GoTo driveError
retryDrive:
dirList.Path = drvList.Drive
Exit Sub
driveError:
Dim response As Integer, description As Integer
description = vbExclamation + vbRetryCancel
response = MsgBox(Err.Description, description, "Drive Error")
If response = vbRetry Then
Resume retryDrive
End If
End Sub
Wyrażenie On Error Resume Next pozwala opuścić wszystkie błędy wykonania,
Wyrażenie On Error GoTo 0 wyłącza pułapkowanie
Private Sub drvList_Change()
On Error Resume Next
dirList.Path = drvList.Drive
End Sub
Zgłaszanie błędu
Do zgłoszenia błędu (ponownego jego zgłoszenia) używa się metody Raise obiektu
Err.
description = "Unable to process the data provided"
Err.Raise Err.Number, "myObject", description
W przykładzie obsługiwane są wszystkie błędy, które mogą zostać zgłoszone przez
InputBox, za wyjątkiem niezgodnego typu danych (Error code 13).
Dim age As Integer
On Error GoTo incorrectDataType
age = InputBox("Enter your name", "Age")
Me.Print "You are " & age & " years old"
Exit Sub
incorrectDataType:
If Err.Number = 13 Then
Err.Raise 13
Else
MsgBox Err.description, vbExclamation, "Error"
End If