Assertions عرض CRT

ينطبق هذا الموضوع على:

النسخة

Visual Basic

C#‎

#F

C++‎

مطور الويب

Express

الموضوع الذي لا ينطبق الموضوع الذي لا ينطبق الموضوع الذي لا ينطبق

أصلي فقط

الموضوع الذي لا ينطبق

pro ، Premium و Ultimate

الموضوع الذي لا ينطبق الموضوع الذي لا ينطبق الموضوع الذي لا ينطبق

أصلي فقط

الموضوع الذي لا ينطبق

يعرف ملف الرأس CRTDBG.H الماكرو _ASSERT و _ASSERTE للتحقق من التأكيد.

الماكرو

النتيجة

_ASSERT

إذا الفرعي تعبير يقيم إلى خطأ، رقم الخط واسم الملف من _ASSERT.

_ASSERTE

نفس كـ _ASSERT، بالإضافة إلى تمثيل سلسلة التعبير أي w كـ كـ serted.

_ASSERTEهو أكثر فعالية لأن تقارير بالتعبير asserted الذي قيد لتكون خطأ. قد يكون هذا يكفي للتعرف على المشكلة دون الرجوع إلى تعليمات برمجية المصدر. ومع ذلك، سوف يحتوي على الإصدار تصحيح تطبيق الخاص بك أو ثابت سلسلة لكل تعبير مؤكد استخدام _ASSERTE. إذا قمت باستخدام _ASSERTEوحدات الماكرو، هذه التعبيرات سلسلة يستغرق مقداراً كبيرا من " العديد من ذاكرة. إذا الذي يثبت إلى تكون مشكلة، استخدم _ASSERTإلى حفظ ذاكرة.

عند _DEBUG هو المعرفة _ASSERTEالماكرو هو تعريف كما يلي:

#define _ASSERTE(expr) \
   do { \
      if (!(expr) && (1 == _CrtDbgReport( \
         _CRT_ASSERT, __FILE__, __LINE__, #expr))) \
         _CrtDbgBreak(); \
   } while (0)

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

استبدال printf

_ASSERTEيسمح لك إلى استبدال التعليمة البرمجية التالية:

#ifdef _DEBUG
   if ( someVar > MAX_SOMEVAR )
      printf( "OVERFLOW! In NameOfThisFunc( ),
               someVar=%d, otherVar=%d.\n",
               someVar, otherVar );
#endif

بجملة واحدة:

_ASSERTE(someVar <= MAX_SOMEVAR);

يتم الآن التدقيق من وجود عطب كومة ذاكرة مؤقتة

يستخدم المثال التالي _CrtCheckMemory إلى التحقق من وجود تلف كومة ذاكرة مؤقتة:

_ASSERTE(_CrtCheckMemory());

يتم الآن التدقيق من صلاحية المؤشر

يستخدم المثال التالي _CrtهوValidPointer للتحقق من نطاق ذاكرة معين هو صالح للقراءة أو الكتابة.

_ASSERTE(_CrtIsValidPointer( address, size, TRUE );

يستخدم المثال التالي _CrtIsValidHeapPointer للتحقق من مؤشر يشير إلى ذاكرة في الكومة المحلية (كومة ذاكرة المؤقتة التي تم إنشاؤها و إدارته من قبل هذا المثيل من مكتبة وقت التشغيل C — يمكن أن يكون لملف DLL المثيل الخاص به للمكتبة، و لذلك الخاصة به الكومة، خارج كومة ذاكرة المؤقتة للتطبيق). هذا التأكيد catches غير فارغة فقط أو خارج-of-bounds عناوين، ولكن أيضا مؤشرات إلى المتغيرات الثابتة والمتغيرات المكدس أي ذاكرة غير المحلية الأخرى.

_ASSERTE(_CrtIsValidPointer( myData );

يتم الآن التدقيق من حظر ذاكرة

يستخدم المثال التالي _CrtIsMemoryBlock إلى التحقق من أن حظر ذاكرة في الكومة المحلية ويحتوي على نوع حظر صالح.

_ASSERTE(_CrtIsMemoryBlock (myData, size, &requestNumber, &filename, &linenumber));

راجع أيضًا:

المبادئ

assertions