0Pricing
C Academy · درس

لماذا Valgrind

اكتشاف أخطاء الذاكرة

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

ما هي Valgrind

إن Valgrind إطار عمل لإضافة أدوات مراقبة، يشغّل برنامجك داخل وحدة معالجة مركزية اصطناعية ويراقب كل عملية على الذاكرة.

أما أداته الأكثر استخدامًا، memcheck، فتكتشف الأخطاء التي تتسبب في تعطل برامج C بعد ساعات من وقوع الخطأ الحقيقي.

  • تسرّبات الذاكرة
  • استخدام الذاكرة المحررة أو غير المهيّأة
  • القراءة والكتابة خارج الحدود
  • استدعاء free بطريقة خاطئة أو استخدام مخصّصات غير متطابقة

لماذا تحتاج C إليها

لا تحتوي C على جامع للقمامة ولا تتحقق من الحدود. فالمصرّف يثق بك ثقة كاملة.

يُصرَّف تجاوز سعة المخزن المؤقت أو نسيان free دون أي تحذير، وقد يعمل البرنامج بصورة طبيعية في الاختبارات، ثم يتلف البيانات أو يتعطل في بيئة الإنتاج.

تمنحك Valgrind شبكة الأمان التي ترفض اللغة توفيرها.

برنامج يسرّب الذاكرة

يخصص هذا البرنامج ذاكرة ولا يحررها أبدًا. ويُصرَّف ويعمل دون أي شكوى.

تُفقَد الكتلة التي خصصها malloc لحظة عودة main. وفي خادم يعمل لفترة طويلة، قد تؤدي آلاف الكتل من هذا النوع إلى استنفاد ذاكرة RAM.

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    int *data = malloc(100 * sizeof(int));
    data[0] = 42;
    printf("%d\n", data[0]);
    return 0; /* forgot free(data) */
}

ما يفوّتُه المصرّف

شغّل ذلك البرنامج باستخدام gcc -Wall -Wextra وستحصل على صفر من التحذيرات.

يفكر المصرّف في الصياغة والأنواع، لا في سلوك الذاكرة أثناء التشغيل. فالتسرّب حقيقة تحدث وقت التشغيل ولا تظهر أثناء التصريف.

وهذه هي الفجوة التي تملؤها Valgrind تحديدًا.

كيف تعمل إضافة أدوات المراقبة

لا تحتاج Valgrind إلى الشفرة المصدرية أو إلى خيارات تصريف خاصة، إذ تعمل على الملف التنفيذي المُصرَّف.

تعيد تصريف شفرة الآلة باستخدام JIT، فتُدرج عمليات تحقق حول كل تحميل وتخزين وتخصيص. وتحصل كل بايت على بيانات وصفية ظلّية تتتبع ما إذا كان قابلًا للعنونة ومُعرّفًا.

تشغيلها

لاستدعائها بالشكل الأساسي، أضفها ببساطة قبل أمرك المعتاد.

يطلب الخيار --leak-check=full تفصيلًا لكل تسرّب مع تتبعات المكدس.

valgrind --leak-check=full ./myprogram arg1 arg2

التصريف للحصول على تقارير جيدة

يمكن لـ Valgrind تشغيل أي ملف تنفيذي، لكن تقاريرها تكون أكثر فائدة بكثير عند توفر رموز التصحيح.

صرّف باستخدام -g لتعرض التتبعات أسماء الملفات وأرقام الأسطر بدلًا من العناوين الخام.

  • يضيف -g معلومات التصحيح
  • يتجنب -O0 إعادة الترتيب التي يجريها المحسّن وقد تربك التتبعات
gcc -g -O0 -o myprogram myprogram.c

التكلفة

إضافة أدوات المراقبة ليست مجانية. فالبرنامج الذي يعمل تحت memcheck يكون أبطأ بنحو 10 إلى 50 مرة ويستخدم ذاكرة أكبر.

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

مجموعة الأدوات

Valgrind أكبر من memcheck؛ إذ تشترك أدوات أخرى في النواة نفسها:

  • memcheck — أخطاء الذاكرة والتسرّبات (الافتراضية)
  • cachegrind — تحليل أداء ذاكرة التخزين المؤقت والفروع
  • callgrind — تحليل أداء مخطط الاستدعاءات
  • helgrind — اكتشاف تعارضات سلاسل التنفيذ
  • massif — تحليل أداء الكومة بمرور الوقت

متى تستخدمها

استخدم Valgrind كلما لاحظت ما يلي:

  • تعطلات غامضة يتغير موضعها عند إضافة printf
  • استخدامًا للذاكرة يزداد بلا توقف
  • قيمًا عشوائية تتغير بين عمليات التشغيل
  • تعطلات لا تحدث إلا مع بعض المدخلات أو على بعض المنصات

هذه هي العلامات الكلاسيكية لـالسلوك غير المعرّف الناتج عن أخطاء الذاكرة.

حدود ينبغي معرفتها

تتسم Valgrind بالقوة، لكنها ليست عالمة بكل شيء:

  • لا يمكنها اكتشاف الأخطاء في مسارات لا ينفذها اختبارك
  • يكون اكتشاف تجاوزات المكدس والمتغيرات العامة أقل موثوقية من اكتشاف تجاوزات الكومة
  • هي بطيئة، لذا لا تناسب أحمال العمل الآنية

اجمع بينها وبين أدوات اكتشاف الأخطاء والاختبارات للحصول على تغطية كاملة.

تحقق سريع

اختبر مدى فهمك لما تتطلبه Valgrind.

مراجعة

أصبحت تعرف الآن ماهية Valgrind وسبب حاجة C إليها:

  • لا توفر C أمانًا تلقائيًا للذاكرة، لذا قد تتجاوز أخطاء وقت التشغيل المصرّف
  • تضيف Valgrind أدوات مراقبة إلى الملف التنفيذي لتتبع كل وصول إلى الذاكرة
  • تكتشف memcheck التسرّبات والوصول غير الصالح والقراءات غير المهيّأة
  • صرّف باستخدام -g -O0 للحصول على تقارير واضحة، وتوقع تباطؤًا كبيرًا

ستكتشف بعد ذلك التسرّبات الحقيقية باستخدام memcheck.

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

هل درس «لماذا Valgrind» مجاني؟

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

ماذا ستتعلم في «لماذا Valgrind»؟

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

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

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

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

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

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

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

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

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