تنقية العقلانية لا تظهر تسرب الذاكرة ، أخطاء وقت التشغيل؟
-
21-09-2019 - |
سؤال
قد لا يبدو هذا مثل سؤال البرمجة ، ولكنه بطبيعته يتعامل مع الكود.
لديّ قطعة من رمز الاختبار التالي ، والتي لها أخطاء واضحة مثل فهرس الصفيف خارج الحدود ، وتسرب الذاكرة:--
#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 الخاص بك.
ثم عند تشغيلك ، يجب أن يقوم بإلغاء المعلومات المتعلقة بالخطأ المطلوبة.
-ميلادي