سؤال

أقوم بتطوير وحدة ملحقة لـ Guile، مكتوبة بلغة C.تتضمن وحدة الامتداد هذه مترجم Python.

نظرًا لأن وحدة الامتداد هذه تستدعي مترجم Python، فأنا بحاجة إلى التحقق من أنها تدير الذاكرة التي تشغلها كائنات Python بشكل صحيح.

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

ومع ذلك، عندما أقوم بتشغيل Guile تحت valgrind، أبلغ valgrind عن تسرب في الذاكرة.تحجب تسربات الذاكرة هذه أي تسرب للذاكرة بسبب الكود الخاص بي.

السؤال هو ما الذي يمكنني فعله لفصل تسرب الذاكرة بسبب وجود أخطاء في الكود الخاص بي من تسرب الذاكرة الذي أبلغت عنه valgrind بسبب Guile.أداة أخرى بدلا من valgrind؟خيارات فالجريند الخاصة؟هل تتخلى عن التعليمات البرمجية اليدوية وتعتمد عليها؟

هل كانت مفيدة؟

المحلول

لديك خياران.أحدهما هو كتابة ملف قمع لـ valgrind والذي يؤدي إلى إيقاف الإبلاغ عن الأشياء التي لا تعمل عليها.لدى بايثون مثل هذا الملف، على سبيل المثال:http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

إذا لم يعجب valgrind بإعداداتك، فهناك احتمال آخر يستخدم libmudflap;قمت بتجميع البرنامج الخاص بك مع gcc -fmudflap -lmudflap, ، ويتم استخدام الكود الناتج لتصحيح أخطاء المؤشر.الموضحة في مستندات مجلس التعاون الخليجي، وهنا: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top