0Pricing
C Academy · درس

قراءة التقارير

تفسير المخرجات

قراءة التقارير درس مجاني في C Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

بنية التقرير

يتكوّن تقرير Valgrind من ثلاثة أجزاء:

  • بادئة معرّف العملية في كل سطر
  • كتلة أخطاء واحدة أو أكثر عند حدوثها
  • ملخص نهائي لـ HEAP and LEAK SUMMARY عند الخروج

إن تعلّم قراءة كل جزء يحوّل جدار النص إلى قائمة مهام دقيقة.

بادئة PID

يبدأ كل سطر من Valgrind بالصيغة ==PID==، مثل ==12345==.

هذا هو معرّف العملية، وليس جزءًا من ناتج برنامجك. وهو يتيح لك فصل رسائل Valgrind عن ناتج printf الخاص ببرنامجك عندما يشتركان في الطرفية.

==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==

مثال على كتلة خطأ

إليك كتلة حقيقية لعملية كتابة غير صالحة:

==12345== Invalid write of size 4
==12345== at 0x4005A1: main (prog.c:6)
==12345== Address 0x520304c is 0 bytes after a block of size 20 alloc'd
==12345== at 0x4838B40: malloc
==12345== by 0x40058E: main (prog.c:5)

اقرأ السطر الأول

يسمّي السطر الأول نوع الخطأ وحجمه: 'Invalid write of size 4'.

يعني الحجم 4 أن الوصول يبلغ 4 بايتات، وهو عادةً من نوع int. يخبرك هذا السطر وحده بفئة الخطأ المتوقعة قبل أن تتابع القراءة.

اقرأ تتبّع المكدس

يمثّل السطر at الإطار الداخلي، حيث حدث الخطأ. وكل سطر by يمثّل مستدعيًا أعلى منه بمستوى واحد.

اقرأ من الأعلى إلى الأسفل، من الأعمق إلى الأقل عمقًا. ويكون أول إطار يتضمّن اسم ملفك غالبًا موضع الخطأ.

==12345==    at 0x4005A1: do_work (work.c:12)
==12345==    by 0x4006F0: main (main.c:8)

اقرأ ملاحظة العنوان

يحدّد السطر Address ... موضع الوصول بالنسبة إلى كتلة معروفة:

  • 0 bytes after a block of size 20 alloc'd — فيضان يتجاوز النهاية مباشرةً
  • 4 bytes inside a block of size 4 free'd — استخدام الذاكرة بعد تحريرها
  • on thread 1's stack — وصول إلى المكدس

كما يعرض موضع تخصيص تلك الكتلة أو تحريرها.

ملخص HEAP

عند الخروج، تحصل على حساب للتخصيصات:

==12345== HEAP SUMMARY:
==12345== in use at exit: 20 bytes in 1 blocks
==12345== total heap usage: 3 allocs, 2 frees, 1,044 bytes allocated

تعني قيمة 'in use at exit' الأكبر من الصفر أن شيئًا ما لم يُحرَّر.

ملخص LEAK

تُصنَّف التسريبات أسفل ملخص الكومة:

definitely lost: 20 bytes in 1 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 0 bytes in 0 blocks

أضف --leak-check=full لإرفاق تتبّع بكل كتلة مفقودة.

ملخص ERROR

يعدّ السطر الأخير كل شيء:

ERROR SUMMARY: 2 errors from 2 contexts

«السياق» هو موضع خطأ فريد. إذا نُفّذ سطر يحوي خطأً مليون مرة داخل حلقة، فسيظل سياقًا واحدًا. هدفك هو 0 errors from 0 contexts.

ترتيب معالجة الأخطاء

عالج التقرير بطريقة منهجية:

  • أصلح أخطاء الوصول غير الصالح أولًا؛ فهي تسبب تلفًا
  • ثم أخطاء القيم غير المُهيّأة
  • ثم التسريبات المفقودة حتمًا والمفقودة بشكل غير مباشر
  • أعد التشغيل بعد كل إصلاح؛ فغالبًا ما يزيل السبب الجذري عدة تقارير

حجب الضوضاء المعروفة

تأتي بعض الأخطاء من مكتبات لا يمكنك إصلاحها، مثل بيئة تشغيل C أو برنامج تشغيل الرسوميات. أنشئ ملف حجب لإسكات هذه الأخطاء من دون إخفاء أخطائك.

يطبع --gen-suppressions=all إدخالات حجب جاهزة للاستخدام، تحفظها ثم تمررها مجددًا باستخدام --suppressions=file.

valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./prog

تحقق سريع

فسّر سطرًا واحدًا من تقرير.

مراجعة

يمكنك الآن قراءة تقارير Valgrind من البداية إلى النهاية:

  • تسبق ==PID== أسطر Valgrind، فتفصلها عن ناتج البرنامج
  • تقدّم كل كتلة خطأ النوع والحجم وتتبع المكدس وملاحظة العنوان
  • تحصي ملخصات HEAP/LEAK التخصيصات والذاكرة المفقودة
  • يعدّ ERROR SUMMARY السياقات الفريدة؛ فاستهدف الوصول إلى الصفر

عالج أخطاء الوصول أولًا، ثم التسريبات، مع إعادة التشغيل أثناء التقدّم.

الأسئلة الشائعة

هل درس «قراءة التقارير» مجاني؟

نعم — نص درس «قراءة التقارير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة التقارير»؟

تفسير المخرجات تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «قراءة التقارير»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا Valgrind
  2. اكتشاف التسربات
  3. الوصول غير الصالح
  4. قراءة التقارير
← العودة إلى C Academy