תרגיל - רישום ומ מעקב
כעת, לאחר שהיישום התחיל בפיתוח, מומלץ להוסיף אבחון נוסף ללוגיקה כדי לעזור למפתחים כשהם מוסיפים תכונות חדשות. אנחנו יכולים להשתמש בלמידה החדשה שלנו על אבחון איתור באגים כדי לבצע משימה זו.
כתיבה במסוף איתור הבאגים
לפני שנאתר באגים ביישום, נוסיף אבחונים נוספים לאיתור באגים. אבחון נוסף יעזור באבחון היישום בזמן שהוא יפעל תחת איתור באגים.
בחלק העליון של
Program.cs
, נוסיף משפטusing
חדש כדי להביאSystem.Diagnostics
כדי שנוכל להשתמש בשיטותDebug
אלה.C#using System.Diagnostics;
הוסף משפט
WriteLine
בתחילת שיטתFibonacci
כדי לקבל בהירות בעת איתור באגים באמצעות הקוד.C#Debug.WriteLine($"Entering {nameof(Fibonacci)} method"); Debug.WriteLine($"We are looking for the {n}th number");
בסוף לולאת
for
שלנו, נוכל להדפיס כל ערך. לחלופין, ניתן להשתמש במשפט הדפסה מותנה באמצעותWriteIf
אוWriteLineIf
. הוסף קו הדפסה רקsum
הוא 1 בסוף הלולאה for.C#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}"); }
איתור באגים ביישום. אתה אמור לקבל את הפלט הבא:
OutputEntering Fibonacci method We are looking for the 5th number sum is 1, n1 is 1, n2 is 1
בדוק אם קיימים תנאים באמצעות 'קביעה'
במצבים מסוימים, ייתכן שתרצה להפסיק את כל היישום הפועל כאשר תנאי מסוים אינו יתמלא. באמצעות Debug.Assert
, באפשרותך לחפש תנאי ופלט מידע נוסף אודות מצב היישום. בוא נוסיף בדיקה ממש לפני משפט ההחזרה כדי לוודא ש- n2 הוא 5.
// 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;
לוגיקת היישום שלנו כבר נכונה, ולכן בוא נעדכן את Fibonacci(5);
כדי Fibonacci(6);
, אשר תכלול תוצאה שונה.
איתור באגים ביישום. כאשר Debug.Assert
בקוד, מאתר הבאגים מפסיק את פעולת היישום כדי שתוכל לבדוק משתנים, לצפות בחלון, לערום קריאות ועוד. הוא גם יוצר פלט של ההודעה במסוף איתור הבאגים.
---- 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
הפסק את איתור הבאגים ולאחר מכן הפעל את היישום ללא איתור באגים על-ידי הזנת הפקודה הבאה במסוף.
dotnet run
היישום מסתיים לאחר שהקביעה נכשלה והמידע נרשם בפלט היישום.
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
כעת, בוא נפעיל את היישום Release
תצורת המערכת עם הפקודה הבאה במסוף.
dotnet run --configuration Release
היישום פועל בהצלחה עד להשלמתו מכיוון שאנחנו כבר לא Debug
התצורה.
מזל טוב, פתרת בהצלחה וביעילות את הקוד באמצעות תכונות של .NET, הכוללות Debug.WriteLine
ו- Debug.Assert
. עבודה טובה!