تصحيح أخطاء C#: تقنيات وأدوات احترافية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تصحيح أخطاء C#: من "لماذا لا يعمل؟" إلى "أعرف مكان الخطأ"

\n\n

كل مطور C# يواجه عاجلاً أم آجلاً موقفًا حيث يتم تجميع الكود وتشغيله، لكنه يفعل شيئًا مختلفًا تمامًا عما هو متوقع. أو يتعطل بخطأ لا يمكن إعادة إنتاجه في بيئة الاختبار. في مثل هذه اللحظات، يتحول تصحيح أخطاء C# من مهمة روتينية إلى فن حقيقي.

\n\n

في هذه المقالة، سنستعرض التقنيات والأدوات التي ستساعدك ليس فقط في العثور على الخلل، بل في القيام بذلك بسرعة وفعالية. لن نقتصر على F5 القياسي - سنتحدث عن نقاط التوقف المتقدمة، والتعبيرات الشرطية، وتحليل الذاكرة، وحتى العمل مع تفريغ الذاكرة في WinDbg. هيا بنا!

\n\n

تقنيات تصحيح أساسية لكنها قوية في C#

\n\n

قبل الانتقال إلى الأدوات الغريبة، دعنا نتأكد من أنك تستخرج أقصى استفادة من Visual Studio. العديد من المطورين يستخدمون فقط F9 (وضع نقطة توقف) و F10 (تخطي)، وهذا خطأ.

\n\n

نقاط التوقف الشرطية (Conditional Breakpoints)

\n\n

تخيل: لديك حلقة من 1000 تكرار، والخلل يظهر فقط في التكرار رقم 567. هل ستضع نقطة توقف وتضغط F5 567 مرة؟ لا. استخدم نقاط التوقف الشرطية.

\n\n
for (int i = 0; i < 1000; i++)\n{\n    // بعض المنطق\n    ProcessItem(items[i]);\n}
\n\n

انقر بزر الماوس الأيمن على الدائرة الحمراء لنقطة التوقف ← اختر "Conditions" ← أدخل i == 567. عندما يصل العداد إلى القيمة المطلوبة، سيتوقف المصحح تلقائيًا. هذا يوفر ساعات من العمر.

\n\n

كشرط، يمكنك استخدام ليس فقط المقارنة، بل أي تعبير منطقي في C#. على سبيل المثال: items[i].IsValid == false && items[i].Id > 100.

\n\n

نقاط التوقف مع الإجراءات (Tracepoints / Actions)

\n\n

أحيانًا لا تحتاج إلى إيقاف التنفيذ، بل فقط تسجيل سجل في لحظة معينة. لهذا الغرض، توجد نقاط توقف مع إجراءات. ضع نقطة توقف، انقر بزر الماوس الأيمن ← "Actions" ← أدخل رسالة مثل تم استدعاء الدالة مع المعامل: {parameter}.

\n\n

هذا يعمل مثل Console.WriteLine، لكن دون تغيير الكود. يمكنك عرض قيم المتغيرات مباشرة في نافذة Output دون مقاطعة عمل التطبيق.

\n\n

"الإرفاق بعملية" (Attach to Process)

\n\n

هل حدث أن الخلل يظهر فقط في بيئة الإنتاج، ولكن ليس محليًا؟ استخدم Debug → Attach to Process. يمكنك الاتصال بعملية قيد التشغيل بالفعل (مثل IIS، أو Windows Service، أو تطبيق سطح المكتب).

\n\n

ملاحظة مهمة: تأكد من أن لديك ملفات PDB (الرموز) للإصدار الذي يعمل. وإلا، بدلاً من أسماء المتغيرات، سترى Variable1 و Variable2.

\n\n

تقنيات متقدمة: التشخيص دون توقف

\n\n

ليست كل الأخطاء يمكن اكتشافها في المصحح. أحيانًا، تغيير التنفيذ يغير سلوك البرنامج (مثلًا بسبب التوقيت في الكود متعدد الخيوط). لمثل هذه الحالات، توجد تقنيات أخرى لتصحيح أخطاء C#.

\n\n

تسجيل السجلات باستخدام DiagnosticSource و Serilog

\n\n

الأداة المدمجة System.Diagnostics.Trace جيدة، لكن للمشاريع الجادة، من الأفضل استخدام التسجيل المنظم. Serilog هو أحد أشهر مسجلات السجلات لـ .NET.

\n\n
using Serilog;\n\nLog.Logger = new LoggerConfiguration()\n    .WriteTo.Console()\n    .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)\n    .CreateLogger();\n\ntry\n{\n    var result = SomeRiskyOperation();\n    Log.Information("تم تنفيذ العملية بنجاح. النتيجة: {Result}", result);\n}\ncatch (Exception ex)\n{\n    Log.Error(ex, "خطأ أثناء تنفيذ العملية");\n}
\n\n

السجلات المنظمة تسمح بالبحث عن الأخطاء ليس حسب النص، بل حسب الحقول. على سبيل المثال، يمكنك العثور على جميع السجلات التي تحتوي على OrderId = 12345 خلال الساعة الأخيرة. هذا أقوى من grep على ملف نصي.

\n\n

التوصيف وتشخيص الأداء

\n\n

المدونات

توصيات الكتب