سؤال

لقد قمت مؤخرا بتنفيذ بعض التعامل مع الاستثناءات المناخية للقبض على الأخطاء في برنامجنا. هذا مفيد بشكل خاص حيث تم تحويلنا للتو من VC6 إلى VS2005. نحن نواجه بعض المشاكل مع استخدام مكتبة STL (عموما يفعلون الأشياء التي لا ينبغي عليهم). أحاول التقاط هذه الأخطاء مع معالج استثناء متجها.

ومع ذلك، لا يبدو أن هذا لا يسمى، بدلا من ذلك يتم معالجة هذه الأخطاء داخليا بواسطة مكتبة وقت تشغيل Microsoft Visual Studio C.

سؤالي هو؛

هل هناك طريقة لإيقاف تشغيل خطأ وقت التشغيل والحصول على الاستثناءات التي تم تمريرها إلى معالج VE؟

شكرا غني

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

المحلول

http://msdn.microsoft.com/en-us/library/aa985973٪28VS.80٪29.aspx.

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

ما سبق يسمح لي بإلقاء الاستثناءات.

نصائح أخرى

يمكنك إيقاف تشغيل الشيكات الإضافية وقت التشغيل. ومع ذلك، ليست كل الأخطاء التي ستؤدي هذا المصيد إلى تعطل يمكنك اعتراضها.

على SIDENOTE: غالبا ما تستهلك هذه الشيكات أداءا كبيرا، بشكل افتراضي، لا يتم إيقاف تشغيله في إصدار الإفراج.

#define _SECURE_SCL 0

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

ركضت في هذه المشكلة منذ فترة واحدة واستغرقتني بعض الوقت لفه رأسي حول ما يفعلونه في وقت التشغيل. أود أن أوصى القراءة "الترحيل من الإصدارات السابقة من Visual C ++" على MSDN مرتين على الأقل. ثم أقرأ "ملحقات إلى مكتبة C، الجزء الأول: واجهات تحديد الحدود (ISO / IEC TR 24731-1)". وبعد هذا الأخير هو اساسي أن معظم المعلمات التحقق من الأشياء تستند إليها.

بمجرد أن تفهم ما يصلون إليه، فقط حدد _CRT_SECURE_NO_DEPRECATE, _SECURE_SCL, ، و _SECURE_SCL_THROWS في إعدادات المشروع الخاص بك. ثم تأكد من أن لديك "تمكين استثناءات C ++" ضبط ل "نعم مع استثناءات SEH (/ EHA)" و "يتحقق وقت التشغيل الأساسي" ضبط ل "تقصير" في مشروعك. على الأقل، هذا هو ما يعمل بالنسبة لنا الآن. لقد استغرق الأمر بعض الوقت لإزالة التعليمات البرمجية غير الصحيحة التي أنشأناها ضمن VC6 رغم ذلك.

يضع أهم شيء يمكنك القيام به جانبا بضعة أسابيع وحفر حقا في ما يفعله الخيارات المختلفة وحدات الماكرو. ثم اكتشف ما يعمل مع التعليمات البرمجية الخاصة بك. لم نفعل ذلك في وقت مبكر بما فيه الكفاية وأضر بالأذى بمجرد أن يكون لدينا بعض "البناء السيئ" جعله خارج الهندسة.

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