تمرين - التسجيل والتتبع
الآن بعد أن بدأ التطبيق في التطوير، من الجيد إضافة المزيد من التشخيصات إلى المنطق لمساعدة المطورين في أثناء إضافة ميزات جديدة. يمكننا استخدام معرفتنا الجديدة بتشخيص التصحيح لإنجاز هذه المهمة.
الكتابة إلى وحدة تحكم تتبع الأخطاء
قبل أن نصحح التطبيق، دعنا نضيف المزيد من تشخيصات تتبع الأخطاء. ستساعد التشخيصات الإضافية في تشخيص التطبيق أثناء تشغيله تحت تتبع الأخطاء.
في الجزء العلوي من ملف 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.WriteLineDebug.Assert. أحسنت!