Debuggen von Skriptobjekten in ASP-Seiten

Aktualisiert: November 2007

Beachten Sie beim Debuggen von Skriptobjekten in ASP-Seiten Folgendes:

  • Was ist das Skriptobjektmodell?

  • Debuggen und die Skriptbibliothek

  • Aktivieren der Debugfunktion für Skriptobjekte

  • Erstellen von Fehlerberichten

  • Verfolgen von Ereignissen

  • Verfolgen von Warnungen

Was ist das Skriptobjektmodell?

Das ASP-Skriptobjektmodell definiert einen Satz von Objekten mit Ereignissen, Eigenschaften und Methoden, die Sie in der Webanwendung verwenden können. Die meisten Skriptobjekte stellen Elemente der Benutzeroberfläche wie Schaltflächen und Textfelder dar und haben eine ähnliche Funktionsweise wie Steuerelemente in Microsoft Visual Basic.

Für Skriptobjekte in Microsoft Visual Studio 2005 ist keine spezielle Laufzeit erforderlich. Sie werden in Skriptdateien definiert, die in der ASP-Seite enthalten sind, wenn Sie die Objekte verwenden. Obwohl es sich bei diesen Dateien lediglich um Skripte handelt, kapseln Sie ADO (ActiveX Data Objects)-Befehle und HTML-Elemente für das Erstellen komplexer Objekte, die die ereignisgesteuerte Programmierung unterstützen.

Es gibt zwei Versionen von jedem Skriptobjekt: eine auf dem Server ASP für generische HTML 3.2-Browser ausgeführte Version und eine auf dem Client in Internet Explorer 4.0 und höher ausgeführte Version. Das Programmiermodell (Ereignisse, Methoden und Eigenschaften) ist für beide Versionen gleich. Skriptobjekte können direkt im Code oder mithilfe von Entwurfszeit-Steuerelementen erstellt und verwendet werden. Beim Speichern der ASP-Seite wird der Skriptobjektcode als eine Kombination von Standard-HTML- und Skriptcode beibehalten.

Debuggen und die Skriptbibliothek

Da die Skriptobjekte selbst als Skriptcode geschrieben werden, kann das Debuggen der von Ihnen geschriebenen Skripte, die mit dem Skriptobjektmodell interagieren, aus folgenden Gründen aufwändig sein:

  • Wenn Sie mit dem Debugger das eigene Skript durchgehen, gelangen Sie möglicherweise in den unbekannten und komplexen Code der Skriptbibliothek.

  • Wenn innerhalb der Skriptbibliothek ein Fehler auftritt, kann deren Durchlaufen aufwändig sein und keine Hinweise auf den Fehler ermöglichen.

  • Außerdem ist es meist sehr schwierig die Abfolge der Ereignisse und den Ablauf der Steuerung zwischen dem Skript und dem Skriptobjektmodell zu verfolgen.

Sie können die Anwendung auch unter diesen Umständen nun mit den folgenden Debugoptionen für das Skriptobjektmodell debuggen:

  • Abfangen von Fehlern auf niedriger Ebene – Wenn bei einem Skriptobjekt, z. B. einem Recordset, ein Fehler auftritt, kann dieses detaillierte Fehlermeldungen bereitstellen. Diese Option ist hilfreich für das Suchen von Fehlern in Komponenten, die aus externen Gründen fehlschlagen können.

  • Ablaufverfolgungsereignisse – Sie können auf der Seite eine Auflistung der ausgelösten Ereignisse anzeigen lassen, wenn diese auftreten. Diese Option ist hilfreich, um zu ermitteln, wann die Skripts in Bezug auf Ereignisse des Skriptobjektmodells ausgeführt werden.

  • Ablaufverfolgungswarnungen – Sie können Warnmeldungen über mögliche Fehler anzeigen, die ansonsten im Hintergrund auftreten. Diese Option ist hilfreich für das Suchen bestimmter Probleme wie der Übergabe ungültiger Parameter an eine Methode.

Aktivieren der Debugfunktion für Skriptobjekte

Eine ASP-Seite enthält normalerweise am Anfang einen Skriptblock mit Debugoptionen. Standardmäßig werden die Optionen deaktiviert. Der Skriptblock sieht folgendermaßen aus:

<SCRIPT id=DebugDirectives runat=server language=javascript>

// Set these to true to enable debugging or tracing

@set @debug=false

@set @trace=false

</SCRIPT>

Für das Debuggen von Skriptobjekten muss JScript 5.0 oder höher auf dem Server ausgeführt werden. Sie können JScript, Version 5.0, von der Microsoft-Website auf den Server downloaden.

Zum Aktivieren des Debuggens legen Sie die gewünschten Debugoptionen fest. Um z. B. Fehler auf niedriger Ebene abzufangen, ändern Sie den Block folgendermaßen:

<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>

Der Block mit den Debugoptionen muss direkt hinter der @language-Direktive oben auf der ASP-Seite stehen.

Sie können insgesamt vier Optionen festlegen, die in der folgenden Liste beschrieben werden:

Name

Zweck

@debug

Meldet festgelegte Fehler in bestimmten Skriptobjekten.

@trace

Aktiviert die beiden folgenden Ablaufverfolgungsoptionen.

@trace_events

Aktiviert die Ereignisablaufverfolgung.

@trace_warnings

Aktiviert Warnungen für mögliche Fehler, die normalerweise im Hintergrund auftreten.

Details über die einzelnen Einstellungen werden in nachfolgenden Abschnitten dieses Themas beschrieben.

Hinweis:

Wenn Sie @trace auf true festlegen, überschreiben Sie damit die Einstellungen für @trace_events und @trace_warnings. Wenn @trace allerdings false ist, können Sie jede Ablaufverfolgungsoption einzeln aktivieren bzw. deaktivieren.

Die einzelnen Ablaufverfolgungsoptionen sind kein Teil des Standardskriptblocks in der ASP-Seite, d. h., Sie müssen diese hinzufügen, wenn Sie sie einzeln festlegen möchten. Mit dem folgenden Code aktivieren Sie z. B. nur die Ereignisablaufverfolgung, während Warnungen deaktiviert bleiben:

<SCRIPT id=DebugDirectives runat=server language=javascript>

@set @debug = false

@set @trace = false

@set @trace\_events = true

</SCRIPT>

Wenn Sie Microsoft Internet Explorer 4.x verwenden, überschreiben Sie durch das Festlegen einer der @trace-Optionen das BODY-Tag, wodurch die Ereignisbindung im BODY-Tag deaktiviert werden kann, sodass Attribute ignoriert werden. Dieses Problem tritt nicht auf, wenn Sie Internet Explorer 5.0 oder höher verwenden.

Das folgende Format der Ereignisbindung funktioniert in Internet Explorer 4.0 nicht:

<BODY onload="initialize()">

Um diese Einschränkung zu umgehen, verwenden Sie einen anderen Bindungsmechanismus. Wenn Sie VBScript (Visual Basic Scripting Edition) verwenden, können Sie die implizite Bindung verwenden:

<SCRIPT LANGUAGE="VBScript">

Function window_onload()

initialize()

End Function

</SCRIPT>

Wenn Sie JScript verwenden, können Sie ein globales Skript aufrufen, das einem Fensterobjektereignis einen Funktionszeiger zuweist, wie im Folgenden dargestellt:

<SCRIPT LANGUAGE="JScript">
   window.onload = initialize
</SCRIPT>

Wenn das BODY-Tag Attribute enthält, sollten Sie die im Skript festlegen anstatt die Eigenschaften des Dokumentenobjekts festzulegen. Wenn das BODY-Tag das Attribut BGCOLOR="#FFFF00" enthält, können Sie es wie folgt mit einem Skript festlegen. Verwenden Sie die oben stehende Technik, um dieses Skript aufzurufen, wenn das Dokument zum ersten Mal geladen wird.

<SCRIPT LANGUAGE="JScript">
function initialize(){
   document.bgColor = "#FFFF00";
}
</SCRIPT>

Erstellen von Fehlerberichten

Einige Skriptobjekte interagieren mit anderen Objekten außerhalb der Seite. So verwendet z. B. das Recordset-Objekt ADO für den Datenbankzugriff. Wenn während dieser Interaktionen Fehler auftreten, sind die vom externen Objekt gemeldeten Fehlerinformationen möglicherweise nicht eindeutig oder im Kontext der Seite nicht vollständig.

Die @debug-Option ermöglicht Berichtsverfahren, bei denen ein allgemeiner Satz dieser Fehlertypen abgefangen und interpretiert wird. Fehlerinformationen werden in die ASP-Seite geschrieben und zusammen werden mit dem normalen Inhalt der Seite angezeigt. In einigen Fällen wird auch die zugrunde liegende Fehlermeldung angezeigt.

Wenn @debug z. B. auf true festgelegt ist und das Recordset-Objekt versucht, eine ungültige SQL-Anweisung auszuführen, wird auf der Seite ungefähr Folgendes angezeigt:

SCRIPTING OBJECT MODEL EXCEPTION:

FILE: recordset.asp

FUNCTION: Recordset1.open()

DESCRIPTION: Failed to open the ADO recordset. Check for the following

possible causes:

An invalid SQL statement.

Missing or invalid database object name (check Recordset DTC properties)

Missing parameters or parameter type mismatch (parameters must be set

before recordset is opened).

Verfolgen von Ereignissen

Wenn eine ASP-Seite das Skriptobjektmodell verwendet, lösen die einzelnen Skriptobjekte Ereignisse als Reaktion auf Zustandsänderungen (z. B. Recordset1_ondatasetcomplete) oder auf Benutzeraktionen (z. B. Button1_onclick) aus. Sie müssen in Zusammenhang mit den vom Skriptobjektmodell ausgelösten Ereignissen häufig wissen, wann Ihre Skripts ausgeführt werden.

Aktivieren Sie dafür die Ereignisablaufverfolgung, indem Sie die @trace-Option oder die @trace\_events-Option auf true festlegen. Wenn Sie die Ereignisablaufverfolgung aktivieren, werden die Ereignisinformationen beim Eintreten der Ereignisse in die ASP-Seite geschrieben. Ein Teil der ASP-Seite könnte z. B. folgendermaßen aussehen:

EVENT TRACE: thisPage fired oninit event.

EVENT TRACE: Recordset1 fired onbeforeopen event.

EVENT TRACE: Recordset1 fired onrowenter event.

EVENT TRACE: Recordset1 fired ondatasetchanged event.

EVENT TRACE: Recordset1 fired ondatasetcomplete event.

Um zu bestimmen, wann das Skript ausgeführt wird, fügen Sie an wichtigen Stellen Response.Write-Anweisungen ein, wie im folgenden Skript dargestellt. Im Beispiel wird ein Parameter für ein Recordset basierend auf Informationen in einem Textfeld festgelegt. Jeder Schritt wird gemeldet, indem dieser auf der Seite angezeigt wird.

Sub btnQuery_onclick()

Recordset1.close()

Response.Write("Finished closing recordset.")

Recordset1.setParameter 1, txtLastName.value

Response.Write("Finished resetting query parameter.")

Recordset1.open()

Response.Write("Finished reopening recordset.")

End Sub

Mithilfe der bedingten Kompilierungsbefehle von JScript können Sie angeben, dass die Response.Write-Anweisungen nur dann auf der Seite angezeigt werden, wenn Sie die Debugoptionen festlegen. Im folgenden Block wird die Response.Write-Anweisung z. B. nur ausgeführt, wenn die @trace-Option auf true festgelegt ist:

@if (@trace)

Response.Write("Ready to set SQL statement parameters.");

@end

Sie können aber nicht nur die Debugoptionen verwenden, sondern auf eigene Bedingungsflags erstellen, wie im folgenden Beispiel dargestellt:

@set @trace\_custom = true

' ... other script here

@if (@trace_custom)

Response.Write("Ready to set SQL statement parameters.");

@end

Hinweis:

Bevor Sie die Seiten in einer Produktionsumgebung verwenden, sollten Sie alle Debugbedingungen auf false festlegen.

Weitere Einzelheiten über die bedingte Kompilierung finden Sie im Anweisungsabschnitt der Skript-Website von Microsoft unter dem @if-Befehl und dem @set-Befehl.

Verfolgen von Warnungen

Um Skriptobjekte möglichst robust zu gestalten und die Anzeige unerwünschter Informationen auf der ASP-Seite zu reduzieren, melden Skriptobjekte i. d. R. nur schwerwiegende Fehler. Wenn Sie z. B. einen ungültigen Wert an die Methode eines Skriptobjekts übergeben, der Wert aber nicht das vollständige Fehlschlagen des Objekts verursacht, wird dieses häufig weiter ausgeführt, ohne dass eine Fehlermeldung angezeigt wird. Während der Entwicklung der Anwendung möchten Sie allerdings i. d. R. wissen, ob beim Skriptobjekt möglicherweise Probleme auftreten könnten. Nicht gemeldete Probleme können in einem späteren Schritt der Seitenausführung manchmal zu unterschiedlichen Problemen führen, wodurch das Debuggen der Seite erschwert wird.

Eine Lösung hierfür ist das Aufzeichnen von Warnungen, indem Sie die @trace-Option bzw. die @trace\_warnings-Option auf true festlegen. Wenn in einem Skript ein mögliches Problem auftritt, werden die zugehörigen Informationen im folgenden Format auf die Seite geschrieben:

WARNING TRACE:

FILE: recordset.asp

FUNCTION: Recordset1.open()

DESCRIPTION: Recordset is already open.

Siehe auch

Aufgaben

Gewusst wie: Aktivieren des Skriptdebuggens in Internet Explorer

Konzepte

Grundlagen der ASP-Skriptverarbeitung

Weitere Ressourcen

Debuggen von ASP-Anwendungen