RSS
StartseiteKnowledge LibraryTop 10Impressum

Fehler schneller aufspüren

Warum deklarieren, wenn VB das automatisch macht? - Option Explicit und die Vorteile.

Die Suche nach einem Fehler kann eine lästige Angelegenheit sein. Manche machen es sich dann natürlich etwas einfacher und fragen die Kollegen in der Newsgroup und sind sich ganz sicher, dass es ein Bug in VB sein muss, wenn sich das Programm zum Beispiel in einer Endlosschleife aufhängt, denn schließlich haben sie alles richtig gemacht.

Option Explizit ...

... ein kleiner Schritt für eine effizientere Fehlerbeseitigung/ Fehlervermeidung, obwohl diese beiden Wörtchen den Compiler "nur" anweisen ausschließlich deklarierte Variablen zu akzeptieren. Nicht deklarierte Variablen lösen so, einen Fehler aus. Dies ist für viele Programmierer ein Grund, auf die Anweisung "Option Explicit" zu verzichten. Sie empfinden es als lästig Variablen explizit zu deklarieren. Dabei ist es nachher wesentlich lästiger, sich nachher auf die Suche des Fehlers zu begeben.

Ein kleines Beispiel: (ohne Option Explizit)

Private Sub Command1_Click()
  Dim lngCount  As Long

  Do While lngCount < 5000 
    ' -- mach irgendwas -- '
    IngCount = lngCount + 1
  Loop

End Sub

Die Prozedur würde eine kleine aber gemeine Endlosschleife produzieren und man erkennt auf den ersten Blick (Schnelldenker stellen sich bitte vor, das Schleifenkonstrukt befände sich mitten in einem 40-Zeiler ;-) nicht, warum lngCount nicht hochgezählt wird.

Die zwei Wörtchen "Option Explicit", platziert zu Beginn eines Moduls, Formulars etc. bringen Licht ins Dunkel:

Option Explicit

Private Sub Command1_Click()
  Dim lngCount  As Long

  Do While lngCount < 5000
    ' -- mach irgendwas -- '
    IngCount = lngCount + 1
  Loop

End Sub

Bevor sich das Programm in einer Endlosschleife aufhängt, meckert VB "Variable nicht deklariert" und hebt auch netterweise den Übeltäter "IngCount" hervor. Jetzt erkennt man sofort, dass "IngCount" falsch geschrieben wurde, denn deklariert und überprüft wurde "lngCount".

Damit Sie nicht bei jedem neuen Modul erneut "Option Explicit" eintragen müssen, setzen Sie einfach unter Extras => Optionen > Editor ein Häkchen bei "Variablendeklaration erforderlich". Dann kümmert sich VB automatisch um diesen Eintrag bei jedem neuen Modul

Unabhängig davon, ob man nun "Option Explizit" verwendet oder nicht, Sie sollten Variablen immer deklarieren, damit jede Variable auch nur soviel Speicherplatz wie nötig belegt. Denn nicht deklarierte Variablen, werden automatisch als Variant deklariert und belegen für numerische Werte 16 Byte, im Gegensatz zu Integer (2 Bytes), Long, Single (jeweils 4 Bytes), Double, Currency (jeweils 8 Bytes) und Decimal (14 Bytes). Für Zeichenfolgen belegt der Variant generell 22 Bytes + Zeichenfolgenlänge. Ein String variabler Länge benötigt hingegen nur 10 Bytes + Zeichenfolgenlänge, bei Strings mit fester Länge entfallen sogar diese 10 Bytes.

Alternativ können Sie auch die DefTyp- Anweisungen verwenden, um diese Speicherplatzverschwendung und auch Fehler zu verringern. Mit einer DefTyp- Anweisung legen Sie den Standard Datentyp für nicht deklarierte Variablen fest:

DefLng A-Z

Diese Anweisung im Deklarationsabschnitt bewirkt, dass alle Variablen, deren Namen mit einem Buchstaben von A-Z beginnen, automatisch als Long deklariert werden.

  Dim var
  var = "Hallo Welt ;-)"

Dies würde einen Fehler auslösen, weil jetzt "var" automatisch als Long deklariert wird. Ohne DefTyp- Anweisung wäre "var" ein Variant und hätte die Zeichenfolge aufgenommen. Bei z.B. einer Berechnung würde es früher oder später zu Fehlern kommen.

Die vollständige Kompilierung

Die meisten Fehler schleichen sich während des Schreibens von Code ein (wann auch sonst ;-). Gemeint sind syntaktische Fehler, wie falschgeschriebene oder nicht deklarierte Variablen (s.o.), vergessene Gleichheitszeichen bei der Zuweisung von Eigenschaften, fehlende Argumente beim Aufruf von Methoden oder fehlerhafte If-, Select- und Schleifenkonstrukte.

Um solche Fehler schon im Vorfeld aufzuspüren, wählen Sie im Menü Ausführen => Starten, vollständige Kompilierung, anstelle von "Starten". Das Programm wird erst nach einer erfolgreichen Kompilation ausgeführt. Vorher wird jeder gefundene Fehler angezeigt und sie haben die Möglichkeit den Fehler auszumerzen. Das Risiko eines Absturzes durch Subclassing, kann so während des Debuggens minimiert werden.

Die Vollständige Kompilierung kann auch hilfreich sein, um toten Code aufzuspüren. Zumindest solange Sie wissen bzw. vermuten welche Prozeduren oder Variablen überflüssig geworden sind oder überflüssig geworden sein könnten. Kommentieren Sie einfach die entsprechende Anweisung aus und wählen Sie "Starten, vollständige Kompilierung". Entweder das Programm startet, dann war die Auskommentierte Anweisung wirklich tot und somit überflüssig oder die Kompilierung bricht ab und zeigt, wo die Anweisung (Variable) noch verwendet wird. Wenn Sie für eine veraltete Prozedur/ Variable einen Ersatz haben, der die gleiche Aufgabe erfüllt, schreiben Sie die Anweisung entsprechend um oder Sie heben die Auskommentierung einfach wieder auf.