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. 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] 3
[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 "" (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 On Error GoTo driveerror driveerror: MsgBox Err.Description, vbexclamation, "Drive Error" 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 On Error GoTo driveerror retrydrive: 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 Wyrażenie On Error Resume Next pozwala opuścić wszystkie błędy wykonania,
Wyrażenie On Error GoTo 0 wyłącza pułapkowanie On Error Resume Next 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" incorrectdatatype: If Err.Number = 13 Then Err.Raise 13 Else MsgBox Err.description, vbexclamation, "Error" End If