Inhalt Dokument Beschreibung... 1 Fehlermeldungen anzeigen... 1 Fehlerkorrektur mit Fehlerliste... 2 Laufzeitfehler... 3 Arbeiten mit Haltepunkten... 4 Dokument Beschreibung Bei der Programmierung können vielfältige Fehler gemacht werden. Einige werden sofort bei der Eingabe erkannt. Anderer nur zur Laufzeit. Dieses Dokument beschreibt verschiedene Möglichkeiten zur Fehlersuche in Visual Basic Express. Als Beispiel wird ein Programm, das die Positionsnummer von Objekten der Auswahl in einer Messagebox anzeigt, verwendet. Fehlermeldungen anzeigen Falls nicht schon eingeblendet, bitte über das Menü Ansicht/Fehlerliste die Übersicht Fehler/Warnungen/Meldungen anzeigen lassen. Hier werden schon beim Erstellen eines Programms etwaige Fehler angezeigt. Das ist besonders nützlich, wenn man Beispielcode aus einer Quelle in das Projekt kopiert. 1
Bentley Technical Support Fehlerkorrektur mit Fehlerliste Hier drei Beispiele zur Fehlerkorrektur. Bitte folgenden Code verwenden: Dim Id As Long Dim Selection As New Bentley.ProStructures.Drawing.PsSelection Dim Result As Long Dim Index As Integer Dim PartProp As New Bentley.ProStructures.Property.PsObjectProperties 'manuelle Objektauswahl Selection.SetSelectionFilter(Bentley.ProStructures.SelectionFilter.kFilterElement) Result = Selection.SelectObjects("ProSteel Elemente wählen oder rechte Maustaste für <Alle>: ") 'Falls kein Element in der Auswahl werden alle Elemente ausgewählt If Result = 0 Then Result = Selection.SelectAllObjects If Result > 0 Then 'Beginn der Schleife durch alle Elemente For Index = 0 To Selection.ObjectCount - 1 Id = Selection.Object() 'Einzelteil Eigenschaften lesen PartProp.readFrom(Id) PosNummer = PartProp.Posnum MsgBox("Positionsnummer ist: " & PosNummer) Next Index Nun sollten in der Fehlerliste folgende Fehler angezeigt werden. Bei großen Projekten ist es sinnvoll die Fehler anhand der Fehlerliste abzuarbeiten. Mit einem Doppelklick auf den Fehlereintrag gelangen Sie direkt in die richtige Zeile. Bei überschaubaren Projekten kann man direkt im Codefenster arbeiten. Alle Fehler werden durch eine blaue Wellenlinie kenntlich gemacht. Fangen wir mit der ersten Fehlermeldung an. Mit Doppelklick auf den Fehlereintrag wird auch gleich ein kleines Fenster mit einem Vorschlag angezeigt. Wenn Sie im Programmierfenster arbeiten, wird nach setzen des Cursors in die fehlerhafte Zeile ein kleines Symbol mit einem roten Ausrufezeichen angezeigt. Darüber gelangen Sie zum selben Hilfsfenster. 2
Hier wurde also eine If then Anweisung ohne End if verwendet. Vielleicht beim Kopieren die letzte Zeile vergessen. Man könnte hier gleich auf Fügen Sie End if ein (fehlt).- klicken und das Einfügen würde automatisch geschehen. Allerdings nicht in der richtigen Zeile. Deshalb bitte End if unterhalb der letzten Zeile Next Index- einfügen. Danach verschwindet die Fehlermeldung und auch die blaue Wellenlinie der Fehler ist behoben. Beim zweiten Fehler -Id = Selection.Object()- betreffend- gibt es leider keine automatische Fehlerbehebung. Wir befinden uns hier in einer For-Next Schleife. Es werden also alle Objekte der Auswahl nacheinander abgearbeitet. Bei der Zeile wurde aber vergessen festzulegen welches Objekt gerade aktuell ist; in den Klammern muß eine laufende Nummer angegeben werden. Diese Nummer kommt aus dem vorher deklarierten Index. Id = Selection.Object(Index) Nun verschwindet auch diese Fehlermeldung. Dritter Fehler betrifft PosNummer. Die Fehlerkorrektur bietet zwar eine Lösung an, wir gehen aber anders vor. Hier wird die Variable PosNummer mit Daten aus den ProSteel Eigenschaften, nämlich der Positionsnummer gefüllt. Ohne aber diese Variable vorher deklariert zu haben. Bitte über der fehlerhaften Zeile -PosNummer = PartProp.Posnum- die variable deklarieren: Dim PosNummer As Integer Danach sollten keine Fehler mehr in der Fehlerliste angezeigt werden. Laufzeitfehler Soweit sollte unser Programm funktionieren. Bitte den Debugmodus starten und dann zwei Profile in die leere Zeichnung einfügen. Dann diese positionieren oder manuell Positionsnummern eintragen. Dann das Programm an den beiden Profilen testen. Es sollten nacheinander zwei Meldungen mit der jeweiligen Positonsnummer zu sehen sein. Soweit so gut. Bitte in einem der Profile die Positionsnummer auf A1001 ändern. Dann das Makro nochmals testen. 3
Bentley Technical Support Nun sollte folgende Meldung in Visual Basic Express erscheinen. Was ist passiert? Wir haben PosNummer als Integer, also als Ganzzahl deklariert. Die Positionsnummer ist aber A1001, also Text. Falsche Deklaration von Variablen ist ein typischer Laufzeitfehler, da beim Erstellen des Programms VB ja nicht wissen kann mit welchen Daten das Programm arbeiten wird. Lösung ist den Debugmodus zu beenden und PosNummer als String, also als Text zu deklarieren. Dann den Debugmodus erneut starten. Nun sollte das Makro fehlerfrei durch laufen. Arbeiten mit Haltepunkten Zu eher schwer zu findenden Fehlern gehören die, wobei das Programm zwar durchläuft, aber nicht das gewünschte Ergebnis erzielt wird. Hier kann es sinnvoll mit Haltepunkten zu arbeiten. Im Debugmodus durch Anklicken des grauen Rands einen Haltepunkt bei Next Index- setzen. 4
Wenn man nun das Programm startet, läuft es nur bis zum Haltepunkt. Vorteil ist nun, daß man überprüfen kann, welche Daten bis hierhin zwischengeladen wurden. Unter PartProp kann man sich nun zum Beispiel eine Liste aller Eigenschaften anzeigen lassen. Außerdem kann man sehen, welche Variablen mit welchen Daten gefüllt sind. Diese Informationen sind oft sehr hilfreich mögliche Fehlerquellen zu finden. Der Haltpunkt kann dann durch erneutes Anklicken oder über das Kontextmenü gelöscht werden. 5