Share via


Einführung in das Debuggen von ASP.NET Web Pages Websites (Razor)

von Tom FitzMacken

In diesem Artikel werden verschiedene Möglichkeiten zum Debuggen von Seiten in einer ASP.NET Web Pages -Website (Razor) erläutert. Debuggen ist der Prozess zum Suchen und Beheben von Fehlern in Ihren Codepages.

Was Sie lernen werden:

  • Hier erfahren Sie, wie Sie Informationen anzeigen, die beim Analysieren und Debuggen von Seiten helfen.
  • Verwenden von Debugtools in Visual Studio

Dies sind die ASP.NET Features, die im Artikel vorgestellt werden:

  • Das ServerInfo Hilfsprogramm.
  • ObjectInfo Helfer.

Softwareversionen

  • ASP.NET Web Pages (Razor) 3
  • Visual Studio 2013

Dieses Tutorial funktioniert auch mit ASP.NET Web Pages 2. Sie können WebMatrix 3 verwenden, aber der integrierte Debugger wird nicht unterstützt.

Ein wichtiger Aspekt bei der Problembehandlung von Fehlern und Problemen in Ihrem Code besteht darin, sie überhaupt zu vermeiden. Dazu können Sie Abschnitte ihres Codes, die wahrscheinlich Fehler verursachen, in try/catch Blöcke einfügen. Weitere Informationen finden Sie im Abschnitt zur Behandlung von Fehlern unter Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax.

Das ServerInfo Hilfsprogramm ist ein Diagnosetool, das Ihnen einen Überblick über Die Webserverumgebung bietet, in der Ihre Seite gehostet wird. Außerdem werden Ihnen HTTP-Anforderungsinformationen angezeigt, die gesendet werden, wenn ein Browser die Seite anfordert. Das ServerInfo Hilfsprogramm zeigt die aktuelle Benutzeridentität, den Typ des Browsers an, der die Anforderung gestellt hat usw. Diese Art von Informationen kann Ihnen helfen, häufige Probleme zu beheben.

  1. Erstellen Sie eine neue Webseite mit dem Namen ServerInfo.cshtml.

  2. Fügen Sie am Ende der Seite kurz vor dem schließenden </body> Tag folgendes hinzu @ServerInfo.GetHtml():

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
       @ServerInfo.GetHtml()
        </body>
    </html>
    

    Sie können den ServerInfo Code an einer beliebigen Stelle auf der Seite hinzufügen. Wenn Sie es jedoch am Ende hinzufügen, bleibt die Ausgabe von Ihren anderen Seiteninhalten getrennt, wodurch sie einfacher zu lesen ist.

    Hinweis

    Wichtig Sie sollten jeglichen Diagnosecode aus Ihren Webseiten entfernen, bevor Sie Webseiten auf einen Produktionsserver verschieben. Dies gilt sowohl für das ServerInfo Hilfsprogramm als auch für die anderen Diagnoseverfahren in diesem Artikel, die das Hinzufügen von Code zu einer Seite beinhalten. Sie möchten nicht, dass Ihre Websitebesucher Informationen über Ihren Servernamen, Benutzernamen, Pfade auf Ihrem Server und ähnliche Details sehen, da diese Art von Informationen für Personen mit böswilliger Absicht nützlich sein kann.

  3. Speichern Sie die Seite, und führen Sie sie in einem Browser aus.

    Debuggen-1

    Das ServerInfo Hilfsprogramm zeigt vier Tabellen mit Informationen auf der Seite an:

    • Serverkonfiguration. Dieser Abschnitt enthält Informationen zum Hostwebserver, einschließlich Computername, version der ausgeführten ASP.NET, Domänenname und Serverzeit.

    • ASP.NET Servervariablen. Dieser Abschnitt enthält Details zu den vielen HTTP-Protokolldetails (als HTTP-Variablen bezeichnet) und werten, die Teil jeder Webseitenanforderung sind.

    • HTTP-Laufzeitinformationen. Dieser Abschnitt enthält Details zur Version der Microsoft-.NET Framework, unter der Ihre Webseite ausgeführt wird, den Pfad, Details zum Cache usw. (Wie Sie unter Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax gelernt haben, basieren ASP.NET Web Pages, die die Razor-Syntax verwenden, auf der ASP.NET Webservertechnologie von Microsoft, die selbst auf einer umfangreichen Softwareentwicklungsbibliothek namens .NET Framework basiert.)

    • Umgebungsvariablen. Dieser Abschnitt enthält eine Liste aller lokalen Umgebungsvariablen und deren Werte auf dem Webserver.

      Eine vollständige Beschreibung aller Server- und Anforderungsinformationen geht über den Rahmen dieses Artikels hinaus, aber Sie können sehen, dass der ServerInfo Helfer viele Diagnoseinformationen zurückgibt. Weitere Informationen zu den zurückgegebenen ServerInfo Werten finden Sie unter Erkannte Umgebungsvariablen auf der Microsoft TechNet-Website und IIS-Servervariablen auf der MSDN-Website.

Einbetten von Ausgabeausdrücken zum Anzeigen von Seitenwerten

Eine weitere Möglichkeit, um zu sehen, was in Ihrem Code geschieht, besteht darin, Ausgabeausdrücke auf der Seite einzubetten. Wie Sie wissen, können Sie den Wert einer Variablen direkt ausgeben, indem Sie der Seite etwas wie @myVariable oder @(subTotal * 12) hinzufügen. Zum Debuggen können Sie diese Ausgabeausdrücke an strategischen Punkten im Code platzieren. Dadurch können Sie den Wert von Schlüsselvariablen oder das Ergebnis von Berechnungen anzeigen, wenn Ihre Seite ausgeführt wird. Wenn Sie das Debuggen abgeschlossen haben, können Sie die Ausdrücke entfernen oder auskommentieren. Dieses Verfahren veranschaulicht eine typische Möglichkeit, eingebettete Ausdrücke zum Debuggen einer Seite zu verwenden.

  1. Erstellen Sie eine neue WebMatrix-Seite mit dem Namen OutputExpression.cshtml.

  2. Ersetzen Sie den Seiteninhalt durch Folgendes:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>   
    
        @{
            var weekday = DateTime.Now.DayOfWeek;
            // As a test, add 1 day to the current weekday.
            if(weekday.ToString() != "Saturday") {
                // If weekday is not Saturday, simply add one day.
                weekday = weekday + 1; 
            }
            else {
                // If weekday is Saturday, reset the day to 0, or Sunday.
                weekday = 0; 
            }
            // Convert weekday to a string value for the switch statement.
            var weekdayText = weekday.ToString(); 
    
            var greeting = "";
            
            switch(weekdayText) 
            { 
                case "Monday":
                    greeting = "Ok, it's a marvelous Monday."; 
                    break; 
                case "Tuesday":
                    greeting = "It's a tremendous Tuesday.";
                    break; 
                case "Wednesday":
                    greeting = "Wild Wednesday is here!";
                    break; 
                case "Thursday":
                    greeting = "All right, it's thrifty Thursday.";
                    break;
                case "Friday":
                    greeting = "It's finally Friday!";
                    break;
                case "Saturday":
                    greeting = "Another slow Saturday is here.";
                    break;
                case "Sunday":
                    greeting = "The best day of all: serene Sunday.";
                    break;
                default:
                    break; 
            }
        }
        
        <h2>@greeting</h2>
    
        </body>
    </html>
    

    Im Beispiel wird eine switch -Anweisung verwendet, um den Wert der weekday Variablen zu überprüfen und dann je nach Wochentag eine andere Ausgabemeldung anzuzeigen. Im Beispiel ändert der if Block innerhalb des ersten Codeblocks willkürlich den Wochentag, indem dem aktuellen Wochentagwert ein Tag hinzugefügt wird. Dies ist ein Fehler, der zu Veranschaulichungszwecken eingeführt wurde.

  3. Speichern Sie die Seite, und führen Sie sie in einem Browser aus.

    Auf der Seite wird die Meldung für den falschen Wochentag angezeigt. Unabhängig davon, an welchem Wochentag es sich tatsächlich handelt, sehen Sie die Nachricht für einen Tag später. Obwohl Sie in diesem Fall wissen, warum die Nachricht deaktiviert ist (weil der Code absichtlich den falschen Tagwert festlegt), ist es in Wirklichkeit oft schwer zu wissen, wo im Code etwas schief läuft. Zum Debuggen müssen Sie herausfinden, was mit dem Wert von Schlüsselobjekten und Variablen geschieht, z weekday. B. .

  4. Fügen Sie Ausgabeausdrücke hinzu, @weekday indem Sie die beiden durch Kommentare im Code angegebenen Stellen einfügen. Diese Ausgabeausdrücke zeigen die Werte der Variablen zu diesem Zeitpunkt in der Codeausführung an.

    var weekday = DateTime.Now.DayOfWeek;
    // DEBUG: Display the initial value of weekday. 
    @weekday
    
    // As a test, add 1 day to the current weekday.
    if(weekday.ToString() != "Saturday") {
        // If weekday is not Saturday, simply add one day.
        weekday = weekday + 1; 
    }
    else {
        // If weekday is Saturday, reset the day to 0, or Sunday.
        weekday = 0; 
    }
    
    // DEBUG: Display the updated test value of weekday.
    @weekday
    
    // Convert weekday to a string value for the switch statement.
    var weekdayText = weekday.ToString();
    
  5. Speichern Sie die Seite, und führen Sie sie in einem Browser aus.

    Die Seite zeigt zuerst den tatsächlichen Wochentag, dann den aktualisierten Wochentag, der sich aus dem Hinzufügen eines Tages ergibt, und dann die resultierende Nachricht aus der switch Anweisung an. Die Ausgabe der beiden Variablenausdrücke (@weekday) weist keine Leerzeichen zwischen den Tagen auf, da Sie der Ausgabe keine HTML-Tags <p> hinzugefügt haben. Die Ausdrücke dienen nur zum Testen.

    Debuggen-2

    Nun können Sie sehen, wo der Fehler liegt. Wenn Sie die weekday Variable zum ersten Mal im Code anzeigen, wird der richtige Tag angezeigt. Wenn Sie es beim zweiten Mal anzeigen, nach dem if Block im Code, ist der Tag um eins aus. Sie wissen also, dass zwischen dem ersten und dem zweiten Auftreten der Variablen für den Wochentag etwas passiert ist. Wenn dies ein echter Fehler wäre, würde diese Art von Ansatz Ihnen helfen, die Position des Codes einzugrenzen, der das Problem verursacht.

  6. Korrigieren Sie den Code auf der Seite, indem Sie die beiden hinzugefügten Ausgabeausdrücke entfernen und den Code entfernen, der den Wochentag ändert. Der verbleibende, vollständige Codeblock sieht wie im folgenden Beispiel aus:

    @{
        var weekday = DateTime.Now.DayOfWeek;
        var weekdayText = weekday.ToString(); 
    
        var greeting = "";
            
        switch(weekdayText) 
        { 
            case "Monday":
                greeting = "Ok, it's a marvelous Monday."; 
                break; 
            case "Tuesday":
                greeting = "It's a tremendous Tuesday.";
                break; 
            case "Wednesday":
                greeting = "Wild Wednesday is here!";
                break; 
            case "Thursday":
                greeting = "All right, it's thrifty Thursday.";
                break;
            case "Friday":
                greeting = "It's finally Friday!";
                break;
            case "Saturday":
                greeting = "Another slow Saturday is here.";
                break;
            case "Sunday":
                greeting = "The best day of all: serene Sunday.";
                break;
            default:
                break; 
        }
    }
    
  7. Führen Sie die Seite in einem Browser aus. Dieses Mal wird die richtige Meldung für den tatsächlichen Wochentag angezeigt.

Verwenden des ObjectInfo-Hilfsprogrammes zum Anzeigen von Objektwerten

Das ObjectInfo Hilfsprogramm zeigt den Typ und den Wert jedes Objekts an, das Sie an das Objekt übergeben. Sie können ihn verwenden, um den Wert von Variablen und Objekten in Ihrem Code anzuzeigen (wie bei Ausgabeausdrücken im vorherigen Beispiel), und Sie können Datentypinformationen zum Objekt anzeigen.

  1. Öffnen Sie die Datei mit dem Namen OutputExpression.cshtml , die Sie zuvor erstellt haben.

  2. Ersetzen Sie den gesamten Code auf der Seite durch den folgenden Codeblock:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
        @{
          var weekday = DateTime.Now.DayOfWeek;
          @ObjectInfo.Print(weekday)
          var weekdayText = weekday.ToString(); 
      
          var greeting = "";
      
          switch(weekdayText) 
          { 
              case "Monday":
                  greeting = "Ok, it's a marvelous Monday."; 
                  break; 
              case "Tuesday":
                  greeting = "It's a tremendous Tuesday.";
                  break; 
              case "Wednesday":
                  greeting = "Wild Wednesday is here!";
                  break; 
              case "Thursday":
                  greeting = "All right, it's thrifty Thursday.";
                  break;
              case "Friday":
                  greeting = "It's finally Friday!";
                  break;
               case "Saturday":
                  greeting = "Another slow Saturday is here.";
                  break;
               case "Sunday":
                  greeting = "The best day of all: serene Sunday.";
                  break;
              default:
                  break; 
          }
        }
        @ObjectInfo.Print(greeting)
        <h2>@greeting</h2>
    
        </body>
    </html>
    
  3. Speichern Sie die Seite, und führen Sie sie in einem Browser aus.

    Debuggen-4

    In diesem Beispiel zeigt das ObjectInfo Hilfsprogramm zwei Elemente an:

    • Der Typ. Für die erste Variable ist DayOfWeekder Typ . Für die zweite Variable ist Stringder Typ .

    • Der Wert. Da Sie in diesem Fall bereits den Wert der Grußvariablen auf der Seite anzeigen, wird der Wert erneut angezeigt, wenn Sie die Variable an ObjectInfoübergeben.

      Bei komplexeren Objekten kann das ObjectInfo Hilfsprogramm weitere Informationen anzeigen – im Grunde genommen kann er die Typen und Werte aller Eigenschaften eines Objekts anzeigen.

Verwenden von Debugtools in Visual Studio

Verwenden Sie Visual Studio, um eine umfassendere Debugerfahrung zu erzielen. Mit Visual Studio können Sie einen Haltepunkt in Ihrem Code in der Zeile festlegen, die Sie überprüfen möchten.

Festlegen des Haltepunkts

Wenn Sie die Website testen, wird der ausführende Code am Haltepunkt angehalten.

Erreichen des Haltepunkts

Sie können die aktuellen Werte der Variablen untersuchen und den Code Zeile für Zeile durchlaufen.

Siehe Werte

Informationen zur Verwendung des integrierten Debuggers in Visual Studio zum Debuggen ASP.NET Razor-Seiten finden Sie unter Programmieren von ASP.NET Web Pages (Razor) mit Visual Studio.

Zusätzliche Ressourcen