Übung: Protokollierung und Ablaufverfolgung

Abgeschlossen

Nachdem die Anwendung die Entwicklung gestartet hat, empfiehlt es sich, der Logik weitere Diagnosen hinzuzufügen, damit Entwickler neue Features hinzufügen. Wir können unsere neuen Kenntnisse der Debugdiagnose verwenden, um diese Aufgabe zu erledigen.

Schreiben in die Debugging-Konsole

Bevor wir die Anwendung debuggen, fügen wir zusätzliche Debugdiagnosefunktionen hinzu. Weitere Diagnosen können bei der Diagnose der Anwendung helfen, während sie unter "Debug" ausgeführt wird.

  1. Fügen Sie oben in der Program.cs Datei eine neue using Anweisung hinzu, damit System.Diagnostics wir die Debug Methoden verwenden können.

    using System.Diagnostics;
    
  2. Fügen Sie WriteLine Anweisungen am Anfang der Fibonacci Methode hinzu, um Klarheit zu erhalten, wenn Sie den Code debuggen.

    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. Am Ende unserer for Schleife konnten wir jeden Wert ausgeben. Wir könnten auch mit WriteIf oder WriteLineIf eine bedingte print-Anweisung verwenden. Damit wird nur dann eine Ausgabezeile hinzugefügt, wenn sum am Ende der for-Schleife 1 ist.

    for (int i = 2; i <= n; i++)
    {                  
        sum = n1 + n2;
        n1 = n2;
        n2 = sum;
        Debug.WriteLineIf(sum == 1, $"sum is 1, n1 is {n1}, n2 is {n2}");    
    }
    
  4. Debuggen Sie die Anwendung. Die Ausgabe sollte wie folgt aussehen:

    Entering Fibonacci method
    We are looking for the 5th number
    sum is 1, n1 is 1, n2 is 1
    

Prüfen auf Bedingungen mit „Assert“

In manchen Situationen möchten Sie möglicherweise die gesamte laufende Anwendung anhalten, wenn eine bestimmte Bedingung nicht erfüllt ist. Mit Debug.Assert können Sie auf eine Bedingung prüfen und zusätzliche Informationen zum Zustand der Anwendung ausgeben. Lassen Sie uns eine Prüfung unmittelbar vor der Rückgabeanweisung hinzufügen, um sicherzustellen, dass n2 gleich 5 ist.

// If n2 is 5 continue, else break.
Debug.Assert(n2 == 5, "The return value is not 5 and it should be.");
return n == 0 ? n1 : n2;

Unsere Anwendungslogik ist bereits richtig, also aktualisieren wir unsere auf Fibonacci(5);Fibonacci(6);, die ein anderes Ergebnis generiert.

Debuggen Sie die Anwendung. Wenn Debug.Assert im Code ausgeführt wird, hält der Debugger die Anwendung an. So können Sie Variablen, das Überwachungsfenster und die Aufrufliste untersuchen und vieles mehr. Außerdem wird die Meldung an die Debugging-Konsole ausgegeben.

---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
The return value is not 5 and it should be.
---- Assert Long Message ----

   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Beenden Sie das Debuggen, und führen Sie dann die Anwendung ohne Debuggen aus, indem Sie im Terminal folgenden Befehl eingeben.

dotnet run

Die Anwendung wird beendet, nachdem die Assertion fehlschlägt und Informationen an der Anwendungsausgabe protokolliert werden.

Process terminated. Assertion failed.
The return value is not 5 and it should be.
   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Jetzt führen wir die Anwendung mit folgendem Terminalbefehl in der Release-Konfiguration aus.

dotnet run --configuration Release

Die Anwendung wird bis zum Abschluss erfolgreich ausgeführt, weil wir uns nicht mehr in der Debug-Konfiguration befinden.

Herzlichen Glückwunsch, Sie erfolgreich und effizient debuggen Code mithilfe von Features von .NET, die enthalten Debug.WriteLine und Debug.Assert. Gut gemacht!