سؤال

أحاول استخدام boundschecker تحليل معقدة البرنامج.تشغيل البرنامج مع boundschecker تقريبا بطيئة جدا أن يكون من أي استخدام لأنه يأخذ لي تقريبا يوميا لتشغيل البرنامج إلى نقطة في القانون حيث وأظن المشكلة موجودة.يمكن لأي شخص أن تعطيني بعض الأفكار عن كيفية فحص أجزاء معينة فقط من البرمجيات باستخدام boundschecker (DevPartner) في Visual Studio 2005 ؟

شكرا مقدما على مساعدتك!

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

المحلول

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

ولكن نحن لا تزال بحاجة إلى بعض من وظائف ، ولكن ليس على البرنامج بأكمله.لذلك كان علينا أن نفعل ذلك بأنفسنا.

في حالتنا نحن تستخدم أساسا إلى محاولة لتعقب تسرب الذاكرة.إذا كان هذا هو الهدف الخاص بك وكذلك ، هناك خيارات أخرى.

  1. Visual Studio يقوم بعمل جيد جدا من أخبرك عن تسرب الذاكرة عند إنهاء البرنامج
  2. فإنه تقارير تسرب في النظام التي تم إنشاؤها
  3. وسوف اقول لكم بالضبط أين تسربت الذاكرة إذا تم إنشاء الملفات المصدر في الأعلى

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

تلك يساعد كثيرا, لكنه في كثير من الأحيان لا يكفي.مضيفا أن المقتطف في كل مكان ليس ممكنا دائما.إذا كنت تستخدم مصنع دروس معرفة أين الذاكرة المخصصة لا تساعد على الإطلاق.لذلك عندما فشل كل شيء آخر, علينا أن نستفيد من #2.

إضافة شيء كما يلي:

#define LEAK(str) {char *s = (char*)malloc(100); strcpy(s, str);}

ثم الفلفل التعليمات البرمجية الخاصة بك مع "تسرب("leak1");" أو أيا كان.تشغيل البرنامج و الخروج منه.الجديد تسربت سلاسل عرض في Visual Studio تسريب تفريغ المحيطة القائمة التسريبات.الحفاظ على إضافة/نقل تسرب البيانات وإعادة تشغيل البرنامج لتضييق نطاق البحث حتى لقد تحديد الموقع الدقيق.ثم إصلاح تسرب إزالة التصحيح التسريبات ، وكنت كل مجموعة!

نصائح أخرى

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

وهذا هو سبب واحد (العديد) لماذا شيء بطيء.

إذا كانت BC للاتصال تطبيق في وقت متأخر، كان يمكن أن يكون أيا من هذه البيانات المبنية، وسوف يكون إما (1) حفر كل شيء دفعة واحدة، أو (2) بداية التخمين حول بعض الأمور. لا حل غير عملي جدا.

وطريقة واحدة ليمرحوا BoundsChecker هو من خلال استبعاد من الأجهزة جميع ولكن بعض الوحدات التي ترغب فيها وأنا أعلم أن ليس كبيرا لأنه إذا كنت تعرف أين كان تسرب انك لن تحتاج BoundsChecker. ما أوصي عادة هو أن استخدام التحقق من وضع Active قبل الميلاد لأول مرة مع تتبع الوحيدة الذاكرة المتاحة. كنت أفتقد التصديقات API ولكن هل يمكن إعادة تشغيل دائما أن منفصل. بعد تشغيل التحقق من النشطين وتحصل على أدلة بشأن والتي تميل حدات أن يكون مشكلة، وعندئذ فقط هل تمكين الأجهزة من أجل وحدة أو وحدات المصالح وتبعيات الخاصة بهم. نحن نعلم التحقق النهائي بطيء بشكل مزعج ولكن كما تنص Mistiano بشكل صحيح، مع التحقق النهائي ليس فقط لا BC الحفاظ على الرسم البياني لجميع القطع المخصصة ولكن أيضا كل المؤشرات والسياقات لهم. هنا يكمن السحر في كيفية التحقق النهائي يمكن الظفر التسريبات والفساد عند نقطة التكرار، وليس فقط على إغلاق التطبيق أو خطأ. المكونات وقح: أعمل في فريق DevPartner. نحن الافراج عن DPS 10.5 في 4 فبراير 2011 بدعم تطبيق إلى x64 في BC. وخلافا للBC64 القديمة نسبيا ونهون من لإيتانيوم التي وفرت فقط تحقق نشط، DPS 10.5 توفر كامل الدعم تحقق النهائي لتقديم الطلبات إلى x64، سواء بالنسبة النقي C ++ وحدات محلية تعمل في العمليات. NET. انظر microfocus.com تحت MF المطور لمزيد من التفاصيل.

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