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));