Übung: Protokollierung und Ablaufverfolgung

Abgeschlossen

Nachdem mit der Entwicklung der Anwendung begonnen wurde, ist es jetzt sinnvoll, der Logik weitere Diagnosefunktionen hinzuzufügen, um Entwickler beim Hinzufügen neuer Features zu unterstützen. Wir können unsere neuen Kenntnisse der Debugdiagnose verwenden, um diese Aufgabe auszuführen.

Schreiben in die Debugging-Konsole

Bevor wir die Anwendung debuggen, fügen wir zusätzliche Debugdiagnosefunktionen hinzu. Diese helfen bei der Diagnose der Anwendung, während sie im Debugmodus ausgeführt wird.

Am Anfang der Datei Program.cs fügen wir eine neue using-Anweisung hinzu, um System.Diagnostics einzuführen, damit wir die Debug-Methoden verwenden können.

using System.Diagnostics;

Fügen Sie am Anfang der Fibonacci-Methode eine WriteLine-Anweisung hinzu, um beim Debuggen des Codes bessere Informationen zu erhalten.

Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");

Am Ende der for-Schleife könnten wir jeden Wert ausgeben. Wir können auch eine Anweisung für bedingten Druck verwenden, indem wir mit WriteIf oder WriteLineIf eine Druckzeile hinzufügen, wenn sum am Ende der 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}");    
}

Debuggen Sie jetzt die Anwendung. Sie sollten die folgende Ausgabe erhalten:

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 stimmt bereits. Ändern wir jetzt also Fibonacci(5); in Fibonacci(6);, was zu einem anderen Ergebnis führt.

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 folgenden Befehl im Terminal eingeben.

dotnet run

Die Anwendung wird beendet, nachdem in der Assertion ein Fehler aufgetreten ist und Informationen in der Anwendungsausgabe protokolliert wurden.

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 haben die Features von .NET, einschließlich Debug.WriteLine und Debug.Assert, zum erfolgreichen und effizienten Debuggen des Codes eingesetzt. Gut gemacht!