Freigeben über


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

von Tom FitzMacken

In diesem Artikel werden verschiedene Möglichkeiten zum Debuggen von Seiten auf einer ASP.NET Webseite (Razor) erläutert. Das Debuggen ist der Prozess des Suchens und Beheben von Fehlern auf Ihren Codeseiten.

Was Sie lernen:

  • So zeigen Sie Informationen an, die beim Analysieren und Debuggen von Seiten hilfreich sind.
  • Verwenden von Debugging-Tools in Visual Studio

Dies sind die im Artikel eingeführten ASP.NET Features:

  • Der ServerInfo Hilfsprogramm.
  • ObjectInfo Helfer.

Softwareversionen

  • ASP.NET Webseiten (Razor) 3
  • Visual Studio 2013

Dieses Lernprogramm funktioniert auch mit ASP.NET Webseiten 2. Sie können WebMatrix 3 verwenden, der integrierte Debugger wird jedoch nicht unterstützt.

Ein wichtiger Aspekt bei der Problembehandlung von Fehlern und Problemen in Ihrem Code besteht darin, diese zuerst zu vermeiden. Sie können dies tun, indem Sie Abschnitte ihres Codes einfügen, die wahrscheinlich Fehler in try/catch Blöcke verursachen. Weitere Informationen finden Sie im Abschnitt zur Behandlung von Fehlern in der Einführung in die Webprogrammierung mit der Razor-Syntax.

Das ServerInfo Hilfsprogramm ist ein Diagnosetool, mit dem Sie einen Überblick über die Webserverumgebung erhalten, in der Ihre Seite gehostet wird. Außerdem werden 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 bei der Behandlung häufiger Probleme helfen.

  1. Erstellen Sie eine neue Webseite namens "ServerInfo.cshtml".

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

    <!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 sie jedoch am Ende hinzufügen, bleibt die Ausgabe von Ihrem anderen Seiteninhalt getrennt, was das Lesen erleichtert.

    Hinweis

    Wichtig Sie sollten jeden Diagnosecode von Ihren Webseiten entfernen, bevor Sie Webseiten auf einen Produktionsserver verschieben. Dies gilt sowohl für den ServerInfo Hilfsdienst als auch für die anderen Diagnosetechniken in diesem Artikel, die das Hinzufügen von Code zu einer Seite umfassen. Sie möchten nicht, dass Ihre Websitebesucher Informationen zu Ihrem Servernamen, Benutzernamen, Pfaden auf Ihrem Server und ähnlichen Details sehen, da diese Art von Informationen für Personen mit böswilliger Absicht nützlich sein könnte.

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

    Debuggen-1

    Das ServerInfo Hilfsprogramm zeigt vier Informationstabellen auf der Seite an:

    • Serverkonfiguration. Dieser Abschnitt enthält Informationen zum Hostwebserver, einschließlich Computername, der Version von ASP.NET, die Sie ausführen, den Domänennamen und die 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 liefert Details über die Microsoft .NET Framework-Version, unter der Ihre Webseite läuft, den Pfad, Informationen zum Cache und mehr. (Wie Sie in der Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax gelernt haben, basieren ASP.NET Webseiten mit der Razor-Syntax auf der ASP.NET-Webservertechnologie von Microsoft, die sich 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 Umfang dieses Artikels hinaus, aber Sie können sehen, dass der ServerInfo Helfer viele Diagnoseinformationen zurückgibt. Weitere Informationen zu den zurückgegebenen Werten ServerInfo finden Sie unter "Erkannte Umgebungsvariablen " auf der Microsoft TechNet-Website und IIS Server-Variablen auf der MSDN-Website.

Einbetten von Ausgabeausdrücken zum Anzeigen von Seitenwerten

Eine weitere Möglichkeit, um zu sehen, was in Ihrem Code geschieht, ist das Einbetten von Ausgabeausdrücken auf der Seite. Wie Sie wissen, können Sie den Wert einer Variablen direkt ausgeben, indem Sie etwas wie @myVariable oder @(subTotal * 12) zur Seite hinzufügen. Zum Debuggen können Sie diese Ausgabeausdrücke an strategischen Punkten in Ihrem Code platzieren. Auf diese Weise können Sie den Wert der Schlüsselvariablen oder das Ergebnis von Berechnungen anzeigen, wenn die Seite ausgeführt wird. Wenn Sie mit dem Debuggen fertig sind, können Sie die Ausdrücke entfernen oder sie auskommentieren. Dieses Verfahren veranschaulicht eine typische Methode zum Verwenden eingebetteter Ausdrücke zum Debuggen einer Seite.

  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 ein Tag zum aktuellen Wochentagwert 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. Ganz gleich, an welchem Tag die Woche tatsächlich ist, wird die Nachricht für einen Tag später angezeigt. Obwohl Sie in diesem Fall wissen, warum die Nachricht deaktiviert ist (da der Code absichtlich den falschen Tagwert festlegt), ist es in Wirklichkeit oft schwer zu wissen, wo die Dinge im Code schief gehen. Zum Debuggen müssen Sie herausfinden, was mit dem Wert von Schlüsselobjekten und Variablen wie weekday geschieht.

  4. Fügen Sie Ausgabeausdrücke hinzu, indem Sie @weekday an den beiden Stellen einfügen, die von Kommentaren im Code angegeben sind. Diese Ausgabeausdrücke zeigen die Werte der Variablen an diesem Punkt 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 und ausführen Sie die Seite in einem Browser.

    Die Seite zeigt zuerst den tatsächlichen Wochentag, den aktualisierten Wochentag an, der sich aus dem Hinzufügen eines Tages ergibt, und dann die resultierende Meldung aus der switch Anweisung. 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 sich der Fehler befindet. Wenn Sie die weekday Variable zum ersten Mal im Code anzeigen, wird der richtige Tag angezeigt. Wenn Sie es das zweite Mal nach dem if-Block im Code anzeigen, ist der Tag um eins verschoben. Sie wissen also, dass zwischen der ersten und zweiten Darstellung der Wochentagvariable etwas passiert ist. Wenn dies ein echter Fehler wäre, würde diese Art von Ansatz Ihnen helfen, den Speicherort des Codes einzugrenzen, der das Problem verursacht.

  6. Korrigieren Sie den Code auf der Seite, indem Sie die beiden von Ihnen 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.

Verwendung des ObjectInfo-Hilfsprogramms zum Anzeigen von Objektwerten

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

  1. Öffnen Sie die Datei "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 und ausführen Sie die Seite in einem Browser.

    Debuggen-4

    In diesem Beispiel zeigt das ObjectInfo Hilfsprogramm zwei Elemente an:

    • Der Typ. Für die erste Variable ist der Typ DayOfWeek. Für die zweite Variable ist der Typ String.

    • Der Wert. Da Sie den Wert der Grußvariable in diesem Fall bereits 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 Debuggingtools in Visual Studio

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

Haltepunkt festlegen

Wenn Sie die Website testen, wird der ausgeführte Code am Haltepunkt angehalten.

Haltepunkt erreichen

Sie können die aktuellen Werte der Variablen untersuchen und die Codezeile nach Zeile durchlaufen.

Werte anzeigen

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

Zusätzliche Ressourcen