أساسيات Valgrind
اكتشف تسرّبات الذاكرة والأخطاء
أساسيات Valgrind درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما هو Valgrind؟
إن Valgrind إطار عمل لإدخال أدوات الفحص. وأداته الافتراضية Memcheck تكتشف تسربات الذاكرة وأخطاءها دون إعادة الترجمة، وذلك بتشغيل البرنامج على وحدة معالجة مركزية اصطناعية.
تشغيل Memcheck
شغّل Valgrind قبل برنامجك. وأنشئ البرنامج باستخدام -g أولًا للحصول على أرقام الأسطر.
g++ -g main.cpp -o app
valgrind --leak-check=full ./appاكتشاف التسربات
يصدر Memcheck تقريرًا عن الذاكرة التي لا تزال محجوزة عند الخروج، ويصنفها إلى مفقودة بالتأكيد، أو مفقودة بشكل غير مباشر، أو لا تزال قابلة للوصول.
#include <cstdlib>
int main() {
int* p = (int*)malloc(40); // never freed -> definitely lost
return 0;
}فئات التسربات
افهم فئات التقرير.
- مفقودة بالتأكيد: لم يعد هناك أي مؤشر إليها؛ وهذا تسرب حقيقي
- مفقودة بشكل غير مباشر: لا يمكن الوصول إليها إلا عبر كتلة مفقودة
- لا تزال قابلة للوصول: يوجد مؤشر إليها عند الخروج، وغالبًا لا يمثل ذلك مشكلة
عمليات القراءة والكتابة غير الصالحة
يرصد Memcheck الوصول إلى ذاكرة غير محجوزة أو محررة، ويعرض عنوان الوصول وحجمه.
#include <cstdlib>
int main() {
int* a = (int*)malloc(2 * sizeof(int));
a[5] = 1; // invalid write past the block
free(a);
return 0;
}القيم غير المهيأة
يحذّر Memcheck عندما يعتمد شرط أو ناتج على قيمة غير مهيأة، وهو مصدر شائع للأخطاء غير الحتمية.
#include <iostream>
int main() {
int x; // uninitialized
if (x == 42) // use of uninitialized value
std::cout << "hi\n";
return 0;
}قراءة المخرجات
تعرض كل كتلة خطأ العملية وتتبّع مكدس الاستدعاءات المتسبب في الخطأ، ومكان حجز الذاكرة بالنسبة إلى كتل الكومة. ويلخّص HEAP SUMMARY عمليات الحجز والتسربات.
خيارات مفيدة
الخيارات الشائعة:
--leak-check=full: عرض تفاصيل كل تسرب--show-leak-kinds=all--track-origins=yes: تتبّع القيم غير المهيأة إلى مصدرها--error-exitcode=1: جعل CI يفشل عند وجود أخطاء
Valgrind مقارنةً بـ ASan
يكتشف كلاهما أخطاء الذاكرة، لكن لكل منهما مزايا ومقايضات.
- Valgrind: لا يحتاج إلى إعادة الترجمة، وأبطأ (من 10 إلى 50 مرة)، وأفضل في اكتشاف عمليات القراءة للقيم غير المهيأة
- ASan: يحتاج إلى إعادة الترجمة، وأسرع بكثير، وأفضل في اكتشاف تجاوزات سعة المكدس
كتم المشكلات المعروفة
قد تُصدر مكتبات الجهات الخارجية ضوضاء في التقارير. أنشئ ملف كبت وطبّقه باستخدام --gen-suppressions=all و--suppressions=file لكتم التقارير المعروفة غير المؤذية.
متى تستخدم Valgrind
استخدم Valgrind عندما لا تستطيع إعادة الترجمة باستخدام أدوات الفحص، أو تحتاج إلى تتبّع دقيق للقيم غير المهيأة، أو تريد رأيًا ثانيًا. وبخلاف ذلك، يكون ASan عادةً أسرع لعمليات CI الروتينية.
تحقق سريع
تذكّر فئات التسربات.
مراجعة
لقد تعلّمتم أساسيات Valgrind.
- يكتشف Memcheck التسربات والوصول غير الصالح وعمليات القراءة للقيم غير المهيأة دون الحاجة إلى إعادة الترجمة
- شغّلوه باستخدام
--leak-check=full --track-origins=yes - أنواع التسربات: مفقودة بالتأكيد، ومفقودة بشكل غير مباشر، ولا تزال قابلة للوصول
- أبطأ من ASan، لكنه ممتاز لاكتشاف أخطاء القيم غير المهيأة
الأسئلة الشائعة
هل درس «أساسيات Valgrind» مجاني؟
نعم — نص درس «أساسيات Valgrind» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات Valgrind»؟
اكتشف تسرّبات الذاكرة والأخطاء تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «أساسيات Valgrind»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخدام gdb وlldb
- AddressSanitizer
- UBSan وTSan
- أساسيات Valgrind