Übung: Protokollierung und Ablaufverfolgung
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!