Debuggen von ASP Skripts - Teil 1
Geschrieben von: Stefan Gründhammer Es wird Ihnen schon aufgefallen sein, daß in Ihren ASP-Scripts kleinere oder größere Fehler auftauchen, nach denen Sie oft lange suchen müssen. Auch wenn Ihre Scripts schon einmal dem Anschein nach fehlerfrei gelaufen sind, ist es die Pflicht eines jeden verantwortungsvollen Programmieres, jede Zeile seines Codes auf Fehler zu prüfen. Damit Sie Fehler schneller aufspüren können, möchte ich Ihnen in diesem Artikel die Verwendung des Microsoft Script Debuggers vorstellen und Ihnen einige kleine Tips und Tricks für dessen Anwendung geben. Folgende Themen werde ich in diesem Artikel behandeln:
Vorbereitungen fürs DebuggenInternet Explorer EinstellungenSie müssen im Internet Explorer einige Einstellungen vornehmen, damit Ihnen der Browser sagen kann in welcher Zeile Ihres ASP-Scripts sich ein Fehler befindet. Öffnen Sie dazu den Microsoft Internet Explorer, wählen Sie im Menü den Punkt Extras, Internetoptionen und selektieren Sie die Karteikarte Erweitert (Advanced). Unter dem Hauptpunkt Browsing befindet sich der Punkt Disable script debugging. Stellen Sie sicher, daß dieser Punkt nicht aktiviert ist. Darunter deaktivieren Sie Show friendly HTTP error messages und bestätigen Ihre Auswahl mit OK. Server-Side Script Debugging ermöglichenBevor Sie Ihre ASP Scripts debuggen können, müssen Sie für den IIS das Debuggen von serverseitigen Scripts erlauben. Ich gehe bei meiner Beschreibung davon aus, daß Sie mit Windows 2000 Server arbeiten. Um das Debuggen zu erlauben, machen Sie folgende Einstellungen:
FehlerartenHier sind einige der häufigsten Fehlerarten, die Ihnen begegnen können, angeführt:
Techniken zum DebuggenEs gibt verschieden Techniken zum Aufspüren und Ausbessern von Bugs (Fehlern). Hier sind einige angeführt:
Breakpoint DebuggingWenn ein Fehler in Ihrem Code auftaucht und Sie nicht genau wissen was den Fehler verursacht, dann setzen Sie einen Breakpoint vor der Stelle, an der Sie den Fehler vermuten. Es ist natürlich auch möglich mehrere Breakpoints vor der Position des vermuteten Fehlers zu setzen. Mit Hilfe des Debuggers können Sie dann die Werte von Variablen oder Eigenschaften abfragen und auf Richtigkeit prüfen. So können Sie mitverfolgen, welche Zeile einen falschen Wert produziert oder ein falsches Ergebnis zurückliefert. Nachdem der Fehler ausgebessert wurde, kann man die Breakpoints wieder löschen. Wie setzt man einen Breakpoint in einer ASP Seite? Eigentlich ganz einfach: Rufen Sie zuerst einmal die ASP Seite im Browser auf. Öffnen Sie den Microsoft Script Debugger, wählen Sie aus dem Menü View, Running Documents und das Running Documents Fenster öffnet sich. In diesem Fenster expandieren Sie die Applikationsbäume der Darstellung und öffnen das Script, welches Sie debuggen wollen, mit einem Doppelklick. Um den Breakpoint zu setzen gehen Sie in die Zeile Ihres Codes, in die der Breakpoint gesetzt werden soll: Dazu wählen Sie Toggle Breakpoint aus dem Debug Menü aus. Wenn Sie dann Ihr Script erneut mit dem Browser aufrufen, arbeitet sich der IIS nur bis zum Breakpoint durch, öffnet dann sofort den Script Debugger und setzt den Cursor auf die Stelle des Breakpoints (Vorausgesetzt es ist kein Fehler vor dem Breakpoint aufgetreten). Danach können Sie Zeile für Zeile das Skript ausführen lassen und die Werte der Variablen sowie die Browserausgabe kontrollieren bis Sie den Fehler entdeckt haben. JIT DebuggingWenn in Ihrem serverseitigen Script ein Runtime Error auftaucht so startet der Microsoft Script Debugger auotmatisch und setzt den Cursor in die Zeile des Skripts, in der der Fehler aufgetreten ist. Die Ausführung des Skripts ist nun unterbrochen aber nicht abgebrochen, man kann also die Werte von Variablen überprüfen. Nach erfolgter Suche kann man den Fehler (oder seine Ursache) in einem Editor ausbessern und die Änderungen speichern bevor man das Script erneut ablaufen läßt. VBScript "Stop" Statement DebuggingMan kann Breakpoints auch direkt im VBScript Code einbauen. Alles was man machen muß ist ein STOP Statement vor die fragliche Stelle im Script zu setzen. Das folgende Beispiel eines serverseitigen Scripts enthält ein STOP Statement, welches die Ausführung des Scripts stoppt - und zwar in Zeile 17. 1: <% @language = VBScript %> 2: <% Option Explicit 3: 4: ' Variablen deklarieren 5: Dim strError 6: Dim ANZ 7: Dim i 8: 9: Function Fehler(ANZ) 10: For i = 1 to ANZ 11: strError = strError & "F E H L E R !<br>" 12: Next 13: Fehler = strError 14: End Function 15: 16: ' Setzen des Breakpoints 17: Stop 18: 19: strError = Fehler(7) 20: Response.Write(strError) 21: %> Wenn Sie dieses Script im Browser aufrufen so startet der Microsoft Script Debugger und zeigt automatisch auf die Zeile mit dem STOP Statement (gekennzeichnet durch einen gelben Pfeil). Jetzt sind Sie am Zug. Sie können nun die Werte der Variablen kontrollieren (bevor diese weiter verarbeitet werden), im Einzelschrittmodus den Code testen, usw. Vergessen Sie aber nicht alle STOP Statements nach der Überprüfung aus Ihrem Script zu entfernen! JScript "debugger" Statement DebuggingNatürlich können Breakpoints auch in serverseitigen Scripts, die in JScript geschrieben sind, gesetzt werden. Um einen Breakpoint in JScript zu provozieren muß man das debugger Statement in den Code einfügen. 1: <% @language = JScript %> 2: <% 3: for (var ANZ = 1; ANZ <=8; ANZ++) 4: { 5: var fehlermeldung = ANZ%2; 6: 7: // Setzen des Breakpoints 8: debugger; 9: if (fehlermeldung == 0) 10: Response.Write("Der Fehlermeldungswert ist " + ANZ + " <br>") 11: } 12: %> Einfache Tips und TricksDer beste Tip ist sicher, keine Fehler zu machen, aber Spaß beiseite - Fehlervermeidung ist effektiver als Fehlerbehandlung.
1: <% @Language = VBScript %> 2: <% Option Explicit 3: ' Variablen deklarieren 4: Dim strError 5: Dim ANZ 6: Dim i 7: %>
1: <% @Language = VBScript %> 2: <% Option Explicit 3: Dim IntVar, VarCheck 4: ' Initialisieren der Variable IntVar 5: IntVar = 123 6: ' Zuweisen des Wert von IntVar zu VarCheck 7: VarCheck = VarType(IntVar) 8: ' Ausschreiben des VarType Wertes 9: Response.Write VarType(IntVar) 10: %> Der Microsoft Script Debugger 1.0Der Microsoft Script Debugger erlaubt es Ihnen Active Server Pages Scripts mittels Variablenkontrolle, Setzen von Breakingpoints und Step Through, zu debuggen - und hilft Ihnen dadurch bei der Diagnose von Fehlern. Sie finden den Script Debugger unter Start, Programme, Zubehör und Microsoft Script Debugger wenn Sie Windows 2000 Server auf Ihrem Rechner installiert haben. Sollten Sie noch mit Windows NT 4.0 arbeiten, dann wird der Script Debugger zusammen mit dem Option Pack installiert. Ein kleiner ÜberblickDer Microsoft Script Debugger liefert eine gut Debugging Umgebung für den Entwickler und ermöglicht diesem seine server- und clientseitigen Scripts, wie VBScript und JScript, zur Laufzeit zu debuggen. Ausbessern müssen Sie die gefundenen Fehler aber wieder in Ihrem Editor, da der Script Debugger nur das Lesen der Scripts erlaubt. Der Script Debugger ist ähnlich wie der Debugger in Visual Basic und ermöglicht es Ihnen den Source Code des Scripts einzusehen und die Ausführung mittels der folgenden Debugging Befehlen zu kontrollieren: Step into, Step over, Step out und Run. Werte von Variablen können mit Hilfe des Debugger Command Windows ausgelesen und verändert werden. Client-side und server-side Scripts werden unterschiedlich behandelt. Client-side Scripts welche in VBScript oder JScript geschrieben sind, werden direkt im Internet Explorer ausgeführt. Das Script das in HTML eingebettet ist wird in den Browser geladen. Der Browser parst die Seite und sobald ein Fehler auftritt, erzeugt dieser eine Fehlermeldung. Server-side Scripts bestehen aus VBScript oder JScript und sind in einer ASP Datei eingebaut. Die .asp Datei wird vom IIS ausgeführt sobald sie vom Browser angefordert wird. Erst zu diesem Zeitpunkt wird der Inhalt an den Browser übermittelt. Da .asp Dateien von oben nach unten ausgeführt werden, werden sowohl Syntax als auch Run-Time-Error erst dann entdeckt und ausgegeben wenn ein Browser-Request erfolgt. Daher sollte man jede ASP Seite mindestens einmal mit dem Browser aufrufen um sie grob auf Fehler zu kontrollieren. WICHTIG: Um server-side Scripts zu debuggen muß sichergestellt sein, daß der Script Debugger auf der selben Maschine wie der Webserver läuft. Ist das nicht der Fall so ist kein Debuggen möglich. Ich werde Ihnen nun anhand kleiner Beispiele einen kurzen Einblick in die Verwendung des Script Debuggers geben. Vorbereitung für die Nutzung des Script DebuggersBevor wir nun zu den Einstellungen fürs Debuggen kommen möchte ich Sie noch an einige wichtige Dinge erinnern.
Verwenden des Script DebuggersGrundsätzlich gibt es 4 Wege den Script Debugger aufzurufen:
Wenn Sie nun den Debugger öffnen sollten Sie vier Fenster (Read only, Running Documents, Call Stack und Command) sehen. Ist das nicht der Fall, dann klicken Sie im Hauptmenü auf View und klicken Sie die nicht mit Häkchen makierten Fenster an. Running Documents: Dieses Fenster zeigt Ihnen alle auf dem Server laufenden Applikationen (sowie für client-side den IE). Unter den Applikationen sind die Dokumente die debugged werden können. Durch Klicken auf das (+) bei den Knoten können Sie den Baum expandieren und das zum Debuggen benötigte Script auswählen. Call Stack: Das Call Stack Fenster zeigt alle zur Zeit aktiven Prozeduren. Sobald eine Prozedur aufgerufen wird kommt sie mit Namen und Scriptsprache in die Liste des Stacks. Ist die Prozedur beendet wird diese Zeile sofort wieder aus der Liste gelöscht. In der Combo-Box oben im Fenster wird der momentan laufende Thread angezeigt, oft laufen auch mehrere Threads zugleich. Dann können Sie mittels Dropdown Auswahl einen bestimmten aussuchen und ihn debuggen. Dadurch, das jeder Thread seinen eigen Call Stack hat, wird das Fenster sofort upgedated sobald Sie den Thread wechseln. Command Window: Hier kann der Entwickler direkt ins Geschehen eingreifen und Werte von Variablen ändern, Prozeduren aufrufen (in der selben Weise wie man sie im Script aurufen würde). Wenn Sie Befehle ins Command Fenster schreiben, vergessen Sie nicht auch die passende Scriptsprache zu verwenden. VBScript verlangt zur Ausgabe der Variablen ein Fragezeichen (?) vor dem Variablennamen. Read only Window: Vielleicht der falsche Name für diese Fenster, denn Sie können hier sehr wohl Aktionen tätigen. Sie können in diesem Fenster Breakingpoints setzen und löschen, Stepping Through Befehle (Step into, Step over und Step out) ausführen und sogar Bookmarks setzen. In diesem Fenster wird Ihnen auch die Position des Errors gezeigt wenn sich der Debugger aufgrund eines Fehlers öffnet. Debugging eines Client-Side Scripting ErrorsNun wird es ernst. Um das Debuggen demonstrieren zu können müssen wir zuerst einmal ein Script schreiben und dann auch noch einen Fehler einbauen (nicht alle Fehler bauen sich von selbst ein). Speichern Sie folgenden Code unter einer TestSite (Website im IIS welche Sie zum Testen Ihrer Scripts bereits angelegt haben sollten) als debug.asp im Root ab. 1: <html> 2: <head> 3: <title>Debug.asp</title> 4: </head> 5: <body> 6: <script language="JavaScript"> 7: document.write("<h1>Client-side scripting error debugging</h1>"); 8: for (i=1, Fehler=" Kein Fehler"; i<=8; i++, Fehler+=" Kein Fehler") 9: { 10: document.writ(Fehler); 11: document.write("<br>"); 12: } 13: </script> 14: </body> 15: </html> Rufen Sie nun die Datei debug.asp im Browser auf. Sobald Sie das getan haben bekommen Sie schon eine Fehlermeldung. Keine Angst, der Fehler liegt nicht bei Ihnen. Vorrausgesetzt Sie haben das Script "fehlerfrei" abgeschrieben werden Sie die folgende Fehlermeldung erhalten: Sollten Sie keinen Script Debugger auf Ihrer Maschine haben, dann zeigt Ihnen Internet Explorer die unten dargestellte Dialogbox (IE 5.5 Screenshot). Sie müssen also Ihre Installation "nachbessern". Zurück in der "richtigen" Dialogbox drücken Sie jetzt auf Yes, der Script Debugger öffnet sich und ein gelber Pfeil zeigt Ihnen die Position des Fehlers an. Wie Sie unschwer erkennen können habe ich das e im document.write(Fehler) weggelassen. Um den Fehler ausbessern zu können müssen Sie diese Datei wieder in Ihrem Editor öffnen und das e hinzufügen. Speichern Sie nun die Datei ab und öffnen Sie diese im Browser noch einmal. Jetzt sollte die Seite einwandfrei dargestellt werden. Achtung: Wenn Sie client-seitige Scripts, welche in einer ASP-Datei generiert werden, debuggen, so kann es vorkommen, daß die in der Fehlermeldung angegebene Zeilennummer nicht mit der des Fehlers übereinstimmt. Der Grund dafür ist, daß sich die Fehlermeldung auf das HTML-Document bezieht und nicht auf die ASP-Datei. Debugging eines Server-Side Runtime ErrorsWie werden serverseitige Runtime Fehler vom Debugger abgearbeitet? Hierzu werden wir wieder ein kleines Script schreiben. Speichern Sie dieses unter dem Namen debugserver.asp auf Ihrer Testsite im Root ab. 1: <% @Language = VBScript %> 2: <% Option Explicit 3: Dim IntVar, VarCheck 4: ' Initialisieren der Variable IntVar 5: IntVar = 459 6: ' Zuweisen des Wert von IntVar zu VarCheck 7: VarCheck = VarType(IntVar) 8: ' Ausschreiben des Wertes 9: 10: Response.Write VarType(Interror) 11: %> Rufen Sie nun die Datei debugserver.asp im Browser auf, und spätestens jetzt wird Ihnen etwas auffallen. Der serverseitige Fehler verursacht das sofortige Öffnen des Debuggers, ohne Sie zuvor zu fragen ob Sie überhaupt debuggen wollen. Für uns Entwickler ist das aber sehr brauchbar, es läßt sich dadurch nämlich unterscheiden ob der Fehler client- oder serverseitig ist. Wenn ein serverseitiger Error auftritt und das Debuggen im IIS erlaubt ist, öffnet sich der Debugger von selbst. Wenn der Fehler aber clientseitigen Ursprungs ist so erscheint zuvor eine Dialogbox und Sie können entscheiden, ob Sie das Skript debuggen wollen oder nicht. Ist das Debuggen im IIS nicht erlaubt und ein serverseitiger Fehler tritt auf, dann wird die Fehlermeldung direkt im HTML-Document angezeigt, vorausgesetzt Sie haben die oben angeführten Einstellungen für den Internet Explorer durchgeführt. Wie auch immer, um den Fehler ausbessern zu können müssen Sie das Script in Ihrem Editor bearbeiten und die Seite erneut laden. In unserem Beispiel wäre die Korrektur der Zeile Response.Write VarType(Interror) auf Response.Write VarType(IntVar) durchzuführen. Debuggen eines Logischen FehlersWas ist wenn sich ein sogenannter logischer Fehler in unser Script eingeschlichen hat? Um dies veranschaulichen zu können werden wir uns ein neues Script basteln. Speichern Sie dieses unter logical.asp im Root Ihrer Website ab. Der Code dazu ist folgender: 1: <% @Language = VBScript %> 2: <% Option Explicit 3: dim x 4: dim y 5: dim Ergebnis 6: 7: x=1 8: y=0 9: Ergebnis=x/y 10: Response.Write "Das Ergebnis ist: " & Ergebnis 11:%> Öffnen Sie nun das Script im Browser. Sobald der Browser die Seite geladen hat öffnet sich der Script Debugger und stellt den Cursor auf die Zeile 9 in unserem Script. Die Fehlermeldung besagt, daß wir eine Division durch 0 (Null) gemacht haben, und diese ist nicht erlaubt. Wenn Sie den Wert der Variable y ungleich 0 (Null) setzten dann wird das Script funktionieren. Arbeiten mit BreakpointsJetzt zeige ich Ihnen noch wie man mit Breakpoints arbeitet. Dadurch kann man das Script an speziellen Punkten (Breakpoints) anhalten um z.B. den Wert von Variablen abzufragen, oder die Befehle im Einzelschrittmodus abarbeiten zu können. Wir werden nun den Wert der Variable y (vor dem Ausbessern) kontrollieren, indem wir in der Zeile 7 unseres Script einen Breakpoint setzen. Sie haben grundsätzlich 2 Möglichkeiten einen Breakpoint im Debugger zu setzen: Stellen Sie den Cursor in die Zeile in der der Breakpoint plaziert werden soll und drücken Sie auf F9, oder gehen Sie ins Hauptmenü zu Debug und drücken dann auf Toggle Breakpoint. Wie schon weiter oben besprochen gibt es auch noch die Möglichkeit einen Breakpoint mittels Scriptbefehl zu setzen. In VBScript ist dies der Befehl Stop und in JScript debugger. Wenn Sie nach dem Setzen des Breakpoint dann im Browser auf Refresh drücken, dann wird der Debugger wieder göffnet und ein roter Pfeil signalisiert Ihnen, daß das Script an dieser Stelle gestoppt wurde. Als nächstes drücken Sie F8 und springen bis zur Zeile 9 (Ergebnis=x/y), wo wir nun den Wert der Variable y bestimmen können. Normalerweise sollte das Command Window bereits geöffnet sein. Wenn nicht, dann öffnen Sie es jetzt. Das Command Window erlaubt es Ihnen die aktuelle Zeile in Ihrem Script auszuführen. Wir sind im Moment in der Mitte eines Scripts welches in VBScript geschrieben ist, deshalb erwartet der Debugger im Command Window Befehle in VBScript (bei JScript erwartet er dann natürlich JScript). Tippen Sie nun in das Command Window ? y oder print y ein und bestätigen Sie. In der zweiten Zeile muß 0 erscheinen. Bevor wir weitergehen ändern wir den Wert von y auf 1. Tippen Sie in das Command Window y=1 und drücken Sie auf Enter. Bei der nächsten Abfrage mit ? y wird der Wert für y daher 1 sein. Um das Script weiterlaufen zu lassen drücken Sie nun F5. Im Browser sollten Sie nun das Ergebnis 1 lesen können. Jetzt wissen wir also, wie wir den Fehler ausbessern müssen! Debugging vom global.asa DateienIch möchte hier nur kurz über das Debuggen der global.asa sprechen, da ich der Meinung bin, daß eine ausführliche Beschreibung den Rahmen dieses Artikels sprengen würde. Dem Anfänger würde ich raten die Finger vom Debuggen der global.asa zu lassen. Fortgeschrittene sollten wissen, daß man die global.asa programmatisch debuggen muß. Dies bedeutet, daß man in den Sourcode bei VBScript den Befehl Stop und bei JScripts debug setzen kann. SchlußbemerkungSie haben nach diesem Artikel einen Einblick in die Welt des Debuggens erhalten. Sie haben gelernt wie man mit dem Microsoft Script Debugger umgeht, Sie wissen nun über verschiedenste Fehlerarten und Techniken zum Debuggen bescheid. Ich habe Ihnen auch noch gezeigt welche Einstellungen Sie im Internet Explorer und im IIS machen müssen, damit das Debuggen möglich wird. Damit Sie in Zukunft weniger Debuggen müssen, sollten Sie sich vielleicht das Buch Writing Solid Code von Steve Maguire einmal durchlesen - darin erhalten Sie wichtige Tips zu Fehlervermeidung (Achtung: Beispiele sind in C). Mit den Informationen und dem Wissen aus diesem Artikel sind Sie für Ihre ersten großen Debuggingerfahrungen bestens gerüstet, nach Ihren Fehlern müssen Sie aber trotzdem selber suchen. Noch Viel Spaß beim Fehlersuchen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
ASP-Fehlerbehandlung unter IIS5 Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |