Übung: Protokollierung und Ablaufverfolgung
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.
Fügen Sie oben in der
Program.csDatei eine neueusingAnweisung hinzu, damitSystem.Diagnosticswir dieDebugMethoden verwenden können.using System.Diagnostics;Fügen Sie
WriteLineAnweisungen am Anfang derFibonacciMethode 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");Am Ende unserer
forSchleife konnten wir jeden Wert ausgeben. Wir könnten auch mitWriteIfoderWriteLineIfeine bedingte print-Anweisung verwenden. Damit wird nur dann eine Ausgabezeile hinzugefügt, wennsumam 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}"); }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!