VB -31: Debugging

Detektivarbeit...

Unser Programm hat einen kleinen, aber ärgerlichen Bug . Er macht sich bei ausgiebigem Testen an zwei verschiedenen Stellen bemerkbar: Zum einen erhalten wir bei unserer Zählübung gelegentlich die Meldung

zum anderen kommt es merkwürdigerweise manchmal vor, daß das Ergebnis unserer Addition bis 10 als Ergebnis eine 11 hat.

Fehler werden uns auch bei sorgfältiger Programmierung immer wieder passieren, je größer ein Programm desto größer die Chancen. Was tun? Eins ist gewiß: Der Computer hast fast immer recht .

Zunächst mal schaut man sich natürlich den Code an, ob einem was auffällt. Bei langen Programmen kann das jedoch schon recht mühsam werden, wen man noch keine Idee hat, wo der Fehler denn stecken könnte. Solange wir den Fehler schon zur Zeit der Entwicklung bemerken, haben wir zunächst mal gute Chancen, ihn zu finden. Die Entwicklungsumgebung stellt uns einige Tools zur Verfügung:

Erster Schritt: Wenn der Fehler zu einem Abbruch in der Entwicklungsumgebung (wie oben) führt, nehmen wir zunächst mal das "Debug"-Angebot wahr, daß uns die Fehlermeldung zur Auswahl gibt. Die Entwicklungsumgebung springt dann genau an die Stelle, wo ein ungültiges Ereignis auftritt, in unserem obigen Fall zu

            imgKugelX(i - 1).Visible = True '1 abziehen, weil Index mit 0 beginnt!
 

(in "Sub Zaehlen").

Schritt zwei: Wenn wir dort mit der Maus über die Variablen fahren, zeigt uns eine kleine Hilfeblase den aktuellen Wert der Variablen an:

Manchmal bringt das schon Rückschlüsse auf die Ursache. In unserem Fall wird für x ein Wert von "10" angezeigt. Da wir aber maximal 9 Kugeln zur Verfügung haben (s. Form_Load) und auch diesen Wert als Max-Wert beim Aufruf unserer Zufallszahlen-Funktion angegeben haben, scheint hier irgendwas schief zu laufen... Warum kann ein Ergebnis 10 sein, wenn wir max 9 angegeben haben?

Schritt drei: Jetzt in unseren Zufallszahlengenerator zu gehen und uns dort die Werte anzeigen lassen, bringt nichts. Das Programm hat die Prozedur bereits verlassen und damit deren Werte vergessen. Da wir den Fehler aber dort vermuten, müssen wir unser Programm veranlassen, schon dort zu stoppen. Das geht, indem wir einen Haltepunkt setzen: Am einfachsten indem wir links im grauen Bereich neben der Codezeile, in der angehalten werden soll, klicken. Alternativ geht auch F9 oder über das Menü/Toolbar auf die weiße Handfläche. Die Haltezeile wird dann rot eingefärbt:

Wenn wir jetzt unser Programm laufen lassen, wird jedesmal an dieser Stelle angehalten, und wir können uns die aktuellen Werte anschauen. Mit F8 können wir das Programm schrittweise ausführen lassen und uns die Änderung der Variablen nach jedem Step anschauen.

Und richtig... Da ist was faul!!! Wenn wir den Taschenrechner zuhilfe nehmen und den aktuellen Wert für z in unsere Formel einsetzen, kommt je nach Zufallszahl, ein Wert von z.B. 6,549789 raus, "Zufallszahl" hat dann aber einen Wert von 7. Das ist nicht nett , denn eigentlich sollte der Wert auf ganze Zahlen abgerundet werden (wir hatten hier ursprünglich mal die Funktion "Int" drin, dann aber weggelassen, weil wir die "Function Zufallszahl" selber ja schon als "Integer" deklariert hatten). Das Dumme daran: VB nutzt jetzt intern die Funktion "CInt", diese rundet auf oder ab (das haben wir übersehen).

Wir packen also reumütig unser "Int" wieder in die Formel:

        Zufallszahl = Int(min + (max - min + 1) * z)
 

Schritt vier: Nochmal einen halben Schritt zurück . Das mit dem Taschenrechner ist doch recht mühsam. Auch hier hat die Entwicklungsumgebung ein praktisches Hilfsmittel parat: Das Debug-Objekt. Es wird nur in der Entwicklungsumgebung benutzt, bei der Kompilierung "verschwindet" es von selber. Wir nutzen es hier zusammen mit der Print-Methode und schreiben eine zusätzliche Zeile in unsere Prozedur:

        Debug.Print (min + (max - min + 1) * z)
 

Wenn jetzt das Programm am Haltepunkt stoppt, dann sehen weiter unten im "Immediate"-Fenster einen Wert und zwar genau den Wert unserer Formel. Recht nützlich!

Wir speichern also unser Programm erneut ab, in der Hoffnung, daß nun alles soweit in Ordnung ist.

Beispielprojekt laden

zurück Index weiter


© Copyright 1998-2000 J.Behling EMail schreiben ABC-Ware's Homepage
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.