سؤال

ولدي برنامج اختبار يسمى ftest. يقوم بتحميل. حتى الملفات التي تحتوي على الاختبارات ويدير الاختبارات التي يجدها هناك. واحدة من هذه التجارب الأحمال ويدير. حتى أن يحتوي على برنامج تشغيل قاعدة البيانات بوستجرس لدينا O / RM.

عند يلقي السائق بوستجرس استثناء والتي تم تعريفها في هذا الملف. حتى (أو أحد أنه يربط، ولكن ftest لا يرتبط)، واشتعلت من قبل إطار اختبار المدمر استثناء يتسبب في segfault.

وهذا segfault يحدث كلما استثناء جمعت في ل. حتى أنه قد تم تحميلها بشكل حيوي (باستخدام DLOAD).

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

.

والاستثناءات هي فئات فرعية من الأمراض المنقولة جنسيا :: استثناء. أحيانا يمكن تعريف الاستثناءات في المكتبات (مثل libpqxx) وهو ما يعني أن الاستثناءات في بعض الأحيان تخرج عن نطاق السيطرة لدينا أيضا.

يتم طرح

والاستثناءات تستخدم شيئا مثل:

throw exception_class( exception_arguments );

وواشتعلت باستخدام:

catch ( std::exception &e ) {
    // handler code
}

هل هناك خيار مترجم الخاصة اللازمة للحصول على هذا العمل؟ هل نحن بحاجة إلى التحول إلى رمي الاستثناءات عبر throw new exception_class( args ) (نحن لا نريد حقا أن تفعل هذا)؟

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

المحلول

وعلى افتراض استخدام دول مجلس التعاون الخليجي الخاص بك -

وإلحاق -Wl، -E عند إنشاء الملف القابل للتنفيذ تدعو dlload (). هذا وتصدر كل حرف نوع من المعلومات من الملف القابل للتنفيذ، والتي ينبغي أن يسمح للRTTI (عندما اصطياد استثناء) للعمل بشكل صحيح.

وVC ++ يستخدم سلسلة يقارن لمباراة typeinfo، والنتائج في أبطأ dynamic_cast <> وغيرها ولكن الثنائيات الصغرى. يستخدم ز ++ مؤشر يقارن.

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

وهناك عدد قليل من المواد المتعلقة بموضوع تطوف على الشبكة أيضا.

وأمل أن يساعد، هايمان.

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