تنقية العقلانية لا تظهر تسرب الذاكرة ، أخطاء وقت التشغيل؟

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

سؤال

قد لا يبدو هذا مثل سؤال البرمجة ، ولكنه بطبيعته يتعامل مع الكود.

لديّ قطعة من رمز الاختبار التالي ، والتي لها أخطاء واضحة مثل فهرس الصفيف خارج الحدود ، وتسرب الذاكرة:--

#include "stdio.h"
#include "stdlib.h"
main()
{
   int i;
   char *ptr;
   ptr = (char*)malloc(5);
   for(i=0;i<10;i++)
   {
      ptr[i]=(char)i;
   }

}

تم بناء هذا الرمز على استوديو MS-Visual 2008.

أحاول استخدام Rational Purify (الإصدار 7.0) لتحديد أخطاء وقت التشغيل ، تسرب الذاكرة في الكود الخاص بي. نحو قراءة بعض المؤشرات حول كيفية إنشاء رمز للاستخدام في التطهير ، لقد فعلت أدناه الأشياء في إعدادات مشروع MSVS-2008:-

1.) تعطيل الرابط الإضافي 2.) علم برمجي معلومات التصحيح هو /zi

3.) قم بتعيين خيار الرابط - "فحص وقت التشغيل الأساسي إلى القيمة الافتراضية.

4.) إضافة خيار رابط إضافي /ثابت: لا.

5.) بناء التكوين هو تصحيح ، لا تمكين التحسين.

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

تُظهر نافذة الإخراج المنهرية إخراج الثنائيات المختلفة (ملف EXE الخاص بي وبعض DLLs لنظام آخر) تم تحميله ، تم تنفيذه. ولكن في الإخراج حيث يعرض بيانات حول EXE ، لا توجد رسالة خطأ.

شعوري هو أنني أخطأ في إعطاء خيارات التجميع/الارتباط أثناء بناء EXE في MS-VS 2008. أو التنسيق القابل للتنفيذ غير متوافق/مفهوم عن طريق التطهير؟

1.) ماذا يمكن أن يكون الخطأ هنا؟ ما هي الخيارات الأخرى التي يمكن أن أحتاج إليها أثناء بناء EXE؟

2.) هل عملي في استخدام تنقية صحيح ، أم أنني أفتقد شيئًا؟ كيف يمكنني التنقية لإظهار جميع الأخطاء في برنامجي بعد إجراء تحليل وقت التشغيل؟

3.) هل هناك أي أداة أخرى (ترخيص مجاني/تجاري) يمكنها اكتشاف تسرب الذاكرة ، صفيف من الأخطاء المربوطة ، واستخدام المؤشرات غير المخصصة ، والمتغيرات ، وفساد الذاكرة ، إلخ .. عن طريق إجراء تحليل وقت التشغيل من رمز C.

آسف على البريد الطويل ، ولكن يجب أن يكون واضحا.

شكرًا.

-ميلادي

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

المحلول

بعد تجربة العديد من الأشياء ، القراءة على الإنترنت ، اكتشفت Soln. لهذا

1) إضافة متغير بيئة جديد على النحو التالي:

name = ibm_rational_purify_enable_selective

vale = 1

2) بصرف النظر عن إعدادات مشروع MS Visual Studio التي ذكرتها في OP ، هناك حاجة إلى إعداد أدناه -

C /C ++-> توليد الكود = مكتبة وقت التشغيل-> Debug /MTD متعدد الخيوط

وعندما تقوم بتشغيل التنفيذ في التنقية ، يجب عليك النقر فوق تكوين Selective ، حدد EXE الخاص بك.

ثم عند تشغيلك ، يجب أن يقوم بإلغاء المعلومات المتعلقة بالخطأ المطلوبة.

-ميلادي

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