أدوات للعثور على تلف الذاكرة في كود c++ المُدار؟

StackOverflow https://stackoverflow.com/questions/34973

  •  09-06-2019
  •  | 
  •  

سؤال

لدي تطبيق .NET، والذي يستخدم مكتبة ضغط C++ مفتوحة المصدر لضغط الصور.نحن نصل إلى مكتبة C++ عبر C++ المُدارة.أرى تلفًا في الكومة أثناء الضغط.يعثر استدعاء _CrtIsValidHeapPointer على خطأ أثناء استدعاء free() عند التنظيف بعد الضغط.

سؤالي هو، هل هناك أدوات مثل Purify للمساعدة في تشخيص هذه المشكلة وما الذي يسبب تلف الكومة عند العمل في مجموعة من التعليمات البرمجية المُدارة وغير المُدارة؟لقد تم اكتشاف الاستثناء في مصحح الأخطاء، ولكن سيكون من الجيد أن يكون لدي أدوات أخرى للمساعدة في العثور على حل للمشكلة.

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

المحلول

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

لست متأكدًا مما إذا كان هذا يساعدك، ولكن نأمل أن يقودك في الاتجاه الصحيح.

نصائح أخرى

على * لا شىء، هناك أداة تسمى valgrind التي أستخدمها للتعامل مع مشكلات الذاكرة، مثل تسرب الذاكرة وتلف الذاكرة.

تنقية عقلانية لنظام التشغيل Windows يدعم .NET، لذا أعتقد أنه يمكن استخدامه؟

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