תרגיל - רישום ומ מעקב

הושלם

כעת, לאחר שהיישום התחיל בפיתוח, מומלץ להוסיף אבחון נוסף ללוגיקה כדי לעזור למפתחים כשהם מוסיפים תכונות חדשות. אנו יכולים להשתמש בידע החדש שלנו באבחון איתור באגים כדי להשלים משימה זו.

כתיבה במסוף איתור הבאגים

לפני שנאתר באגים ביישום, נוסיף אבחונים נוספים לאיתור באגים. אבחון נוסף יעזור באבחון היישום בזמן שהוא יפעל תחת איתור באגים.

בחלק העליון של Program.cs, נוסיף משפט using חדש כדי להביא System.Diagnostics כדי שנוכל להשתמש בשיטות Debug אלה.

using System.Diagnostics;

הוסף משפט WriteLine בתחילת שיטת Fibonacci כדי לקבל בהירות בעת איתור באגים באמצעות הקוד.

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

בסוף לולאת for שלנו, נוכל להדפיס כל ערך. ניתן גם להשתמש במשפט הדפסה מותנה באמצעות WriteIf או WriteLineIf כדי להוסיף קו הדפסה רק כאשר sum הוא 1 בסוף לולאת for:

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}");    
}

איתור באגים ביישום ואתה אמור לקבל את הפלט הבא:

Entering 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. עבודה טובה!