לקריאה באנגלית

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

הושלם

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

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

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

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

    C#‎
    using System.Diagnostics;
    
  2. הוסף משפט WriteLine בתחילת שיטת Fibonacci כדי לקבל בהירות בעת איתור באגים באמצעות הקוד.

    C#‎
    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. בסוף לולאת 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}");    
    }
    
  4. איתור באגים ביישום. אתה אמור לקבל את הפלט הבא:

    Output
    Entering Fibonacci method
    We are looking for the 5th number
    sum is 1, n1 is 1, n2 is 1
    

בדוק אם קיימים תנאים באמצעות 'קביעה'

במצבים מסוימים, ייתכן שתרצה להפסיק את כל היישום הפועל כאשר תנאי מסוים אינו יתמלא. באמצעות Debug.Assert, באפשרותך לחפש תנאי ופלט מידע נוסף אודות מצב היישום. בוא נוסיף בדיקה ממש לפני משפט ההחזרה כדי לוודא ש- n2 הוא 5.

C#‎
// 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 בקוד, מאתר הבאגים מפסיק את פעולת היישום כדי שתוכל לבדוק משתנים, לצפות בחלון, לערום קריאות ועוד. הוא גם יוצר פלט של ההודעה במסוף איתור הבאגים.

Output
---- 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

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

Bash
dotnet run

היישום מסתיים לאחר שהקביעה נכשלה והמידע נרשם בפלט היישום.

Output
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 תצורת המערכת עם הפקודה הבאה במסוף.

Bash
dotnet run --configuration Release

היישום פועל בהצלחה עד להשלמתו מכיוון שאנחנו כבר לא Debug התצורה.

מזל טוב, פתרת בהצלחה וביעילות את הקוד באמצעות תכונות של .NET, הכוללות Debug.WriteLine ו- Debug.Assert. עבודה טובה!