يُشعر بالأخطاء في عمليات التشخيص تزامنيًا كاستثناء مع كود خطأ إلى المستدعي.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: a149cf644e7fالمصدرأسئلة مفتوحة (2)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
يُشعر بالأخطاء في عمليات التشخيص تزامنيًا كاستثناء مع كود خطأ إلى المستدعي.
تُستخدم فئة الاستثناء ara::diag::DiagReportingException للإشعار المتزامن بحالات الخطأ التي تحدث أثناء العمليات داخل فئات التشخيص لـ Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). يتم إنشاء مثيل لها صراحة مع ara::core::ErrorCode محدد وتنقل هذا الكود لتحليل أسباب الخطأ إلى التطبيق المستدعي [SWS_DM_00988]. كقيد مركزي، تم تحديد منشئها كـ noexcept، وexception safe وthread-safe، مما يضمن إنشاءً خاليًا من الأخطاء حتى في سياقات التنفيذ المتزامنة. يجب تجنب المثيلات غير المعالجة، لأنها تؤدي إلى إنهاء فوري للبرنامج.
السياق
تشكل الفئة ara::diag::DiagReportingException فئة الاستثناء المركزية لعمليات الإبلاغ والتقرير داخل الكتلة الوظيفية Diagnostics (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). تم تعريفها كتخصيص علني لـ ara::core::Exception وتمثل حالات خطأ محددة تحدث أثناء التفاعل مع فئات التشخيص [SWS_DM_00987]. في تطبيق AUTOSAR Adaptive، يعمل الاستثناء كحلقة وصل بين خدمات التشخيص الداخلية وبرمجيات التطبيق المستدعية: إذا حدث خطأ أثناء إبلاغ تشخيصي، فإن DiagReportingException يغلف هذه الحالة وينقلها تزامنيًا عبر مكدس الاستدعاءات إلى المستدعي. تشمل أطراف التفاعل الأساسية فئات API المتعلقة بالتشخيص للوحدة diag، والتي تنشئ مثيلًا للاستثناء وتطلقه في حالة الخطأ، بالإضافة إلى روتينات معالجة الأخطاء ذات المستوى الأعلى في التطبيق، والتي تلتقط خطأ التشخيص وتعالجه.
دورة الحياة
يتم إنشاء مثيل لـ ara::diag::DiagReportingException صراحة من خلال تمرير كود خطأ من النوع ara::core::ErrorCode إلى المنشئ [SWS_DM_00988]. يمنع إعلان المنشئ كـ explicit التحويلات الضمنية لأكواد الأخطاء إلى كائنات استثناء ويضمن دائمًا إنشاء مثيلات الاستثناء بشكل متعمد [SWS_DM_00988].
بما أن المنشئ مزود بالمواصفة noexcept، فإنه يُضمن عدم إمكانية حدوث استثناءات أخرى أثناء إنشاء الكائن نفسه [SWS_DM_00988]. هذا أمر ضروري لمسارات الأخطاء، لمنع توالي الاستثناءات أثناء معالجة الأخطاء. بالإضافة إلى ذلك، تم تصنيف عملية الإنشاء صراحة على أنها آمنة من الاستثناءات (exception safe) وآمنة خيطيًا (thread-safe) [SWS_DM_00988]. وبالتالي يمكن لخيوط متعددة إنشاء كائنات استثناء منفصلة بالتوازي وبدون حالات إعاقة متبادلة.
ترتبط دورة حياة الاستثناء بعملية C++ stack unwinding: بعد الإنشاء على مكدس الاستدعاءات، يتم تمرير الكائن عبر آلية throw إلى كتلة catch المسؤولة. ومع مغادرة معالج الاستثناء، تنتهي دورة حياة الكائن، ويتم تحرير الموارد المشغولة تلقائيًا.
مسار الاستخدام
يبدأ مسار الاستخدام المنتظم بمجرد فشل إبلاغ أو عملية تشخيصية داخل Adaptive Platform. في المسار النموذجي، تكتشف فئة التشخيص المنفذة حالة غير مسموح بها وتنشئ ara::core::ErrorCode المناسب. وبدلًا من مجرد تمرير الخطأ كقيمة إرجاع، يتم في مسار الاستثناء المتزامن إنشاء كائن من النوع ara::diag::DiagReportingException وإطلاقه [SWS_DM_00987].
في جانب المستلم، يلتقط المنطق التطبيقي الاستثناء. يحدث هذا ويفضل أن يكون عبر مرجع لكائنات ثابتة (const ara::diag::DiagReportingException& أو بتعددية الأشكال عبر const ara::core::Exception&). بعد ذلك، يستخرج المعالج كائن ara::core::ErrorCode المضمن لتحديد السبب الدقيق للخطأ وبدء تدابير استعادة ملائمة للموقف.
سيناريوهات الأخطاء
تتعلق سيناريوهات الخطأ المرتبطة بـ ara::diag::DiagReportingException أساسًا بتفسير بيانات الخطأ الممررة وغياب المعالجة السليمة للاستثناء.
يتطلب المنشئ إلزاميًا ara::core::ErrorCode صالحًا [SWS_DM_00988]. من خلال تضمين ملف الترويسة ara/diag/diag_error_domain.h[SWS_DM_00988]، يُرجح أن كود الخطأ الممرر ينبع أساسًا من نطاق خطأ التشخيص المحدد. سؤال Q-cb8a197542857807 (مفتوح) يكمن سيناريو الخطأ الأساسي في بنية التطبيق في الالتقاط غير الكامل للاستثناء: إذا لم تتم معالجة DiagReportingException المُطلق على طول مكدس الاستدعاءات عبر كتلة catch مناسبة، فإن ذلك يؤدي حتمًا إلى استدعاء std::terminate وبالتالي إلى انهيار عملية المنصة المعنية. وبما أن المنشئ نفسه مُعلن كـ noexcept[SWS_DM_00988]، فلا يمكن أن يفشل إنشاء مثيل الاستثناء بسبب نقص داخلي في الموارد. لذلك، يجب على المطورين التأكد من أن المكونات المستدعية مهيأة لحدوث DiagReportingException، خاصة عند استخدام واجهات برمجة تطبيقات (APIs) تُشعر بالأخطاء عبر استثناءات بدلًا من ara::core::Result.
تم إنشاء هذا الدليل بواسطة ذكاء اصطناعي بالاستناد إلى مواصفة AUTOSAR Adaptive R25-11.
مخطط الفئات UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني