Definiert die Fehlerdomäne des Persistenzmoduls zur Bereitstellung von Fehlercodes, Textbeschreibungen und Ausnahmen.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: da81ed3d3cb6HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Definiert die Fehlerdomäne des Persistenzmoduls zur Bereitstellung von Fehlercodes, Textbeschreibungen und Ausnahmen.
Die Klasse ara::per::PerErrorDomain definiert die Fehlerdomäne für das Persistenzmodul und verknüpft Fehlercodes mit beschreibenden Meldungen sowie Ausnahmetypen [SWS_PER_00411]. Sie ermöglicht über threadsichere Schnittstellen die Abfrage des Domänennamens sowie das Auflösen von Fehlerbeschreibungen zu konkreten Fehlerwerten. Bei Bedarf überführt sie Fehler über ThrowAsException() in C++-Ausnahmen [SWS_PER_00350]. Sind Ausnahmen in der Compiler-Toolchain deaktiviert, steht diese Auslösefunktion nicht zur Verfügung, sodass die Fehlerprüfung rein rückgabewertbasiert erfolgen muss.
Kontext
Die Klasse ara::per::PerErrorDomain definiert die spezifische Fehlerdomäne für das Persistenzmodul (Persistency) innerhalb der AUTOSAR Adaptive Platform. Sie erbt von der Basistypdefinition ara::core::ErrorDomain und ist als final deklariert, womit sie die Grundlage für die typisierte Fehlerbehandlung und Fehlerabbildung sämtlicher persistenzbezogener Operationen bildet. Über die standardisierten Typaliase Errc[SWS_PER_00411] für die zugrundeliegende Fehlercode-Enumeration PerErrc sowie Exception[SWS_PER_00412] für die modulspezifische Ausnahmebasisklasse PerException verknüpft die Klasse numerische Fehlerwerte, sprechende Fehlermeldungen und konkrete C++-Ausnahmeobjekte. In der Plattformarchitektur interagiert die Fehlerdomäne eng mit den Persistenzdiensten, den aufrufenden Funktionsclustern sowie den generischen Fehler- und Ergebnisstrukturen aus ara::core.
Lebenszyklus
Die Erzeugung einer Instanz erfolgt über den standardmäßigen Konstruktor PerErrorDomain()[SWS_PER_00313]. Dieser Konstruktor ist als noexcept deklariert, vollständig ausnahmesicher (exception safe) und threadsicher (thread-safe). Interpretation: Die Instanz von PerErrorDomain dürfte typischerweise als langlebiges oder globales Objekt verwaltet werden, um während des gesamten Betriebs konsistente Domänenvergleiche und Typauflösungen für Persistenzfehler zu gewährleisten. Frage Q-5d90982fddec40a7 (offen) Da sämtliche abfragenden Operationen der Klasse ebenfalls als threadsicher eingestuft sind, können mehrere Threads parallel auf dieselbe Domäneninstanz zugreifen, ohne dass zusätzliche Synchronisationsmechanismen auf Aufruferebene erforderlich sind.
Nutzungspfad
Ein typischer Nutzungspfad umfasst die Identifikation der Domäne, die Abfrage verständlicher Diagnoseinformationen und optional das Auslösen von Ausnahmen bei aufgetretenen Fehlern im Persistenzmodul. Zunächst liefert die Elementfunktion Name() den eindeutigen Bezeichner der Fehlerdomäne als Zeichenkette zurück [SWS_PER_00314]; sie ist als noexcept, ausnahmesicher und threadsicher spezifiziert. Tritt bei einer Persistenzoperation ein Fehler auf, wird dessen numerischer Fehlerwert über Message() aufgelöst [SWS_PER_00315]. Diese Methode nimmt den numerischen Fehlercode vom Typ CodeType entgegen und liefert die zugehörige Fehlermeldung als konstanten Zeichenzeiger (const char *) zurück, ebenfalls unter Garantie vollständiger Ausnahmesicherheit und Threadsicherheit.
Soll ein Fehlerzustand in eine C++-Ausnahme überführt werden, kommt die Funktion ThrowAsException() zum Einsatz [SWS_PER_00350]. Der folgende Ablauf verdeutlicht das Zusammenspiel bei der Fehlerabfrage und Ausnahmeauslösung:
Sequenzdiagramm: Typischer Ablauf der Fehlerprüfung, Textabfrage und Ausnahmeauslösung über PerErrorDomain. Quellen: [SWS_PER_00314], [SWS_PER_00315], [SWS_PER_00350].
Fehlerszenarien
Beim praktischen Einsatz von ara::per::PerErrorDomain müssen Entwickler die unterschiedlichen Garantien bezüglich Fehlerbehandlung und Ausnahmesicherheit berücksichtigen. Während die abfragenden Schnittstellen Name()[SWS_PER_00314] und Message()[SWS_PER_00315] strikt als noexcept deklariert sind und als ausnahmesicher eingestuft werden, gilt die Elementfunktion ThrowAsException() als nicht ausnahmesicher (not exception safe) [SWS_PER_00350]. Dieses Verhalten ist semantisch begründet, da der Zweck der Funktion im kontrollierten Auslösen einer dem Fehlercode entsprechenden Ausnahme besteht (noexcept(false)).
Eine wesentliche Randbedingung betrifft Plattformen oder Build-Konfigurationen ohne aktivierte C++-Ausnahmen: Ist die Ausnahmebehandlung im Compiler deaktiviert, nimmt ThrowAsException() gemäß [SWS_PER_00350] nicht an der Überladungsauflösung teil. In solchen Umgebungen muss die Anwendungssoftware auf die Auswertung von Fehlercodes über die bereitgestellten Aliase Errc[SWS_PER_00411] und die textuellen Beschreibungen von Message()[SWS_PER_00315] zurückgreifen, anstatt Ausnahmeobjekte des Typs Exception[SWS_PER_00412] abzufangen.
Dieser Leitfaden wurde automatisch auf Basis der AUTOSAR-Spezifikationsanforderungen erstellt.
Throws the exception associated with the error code. As per [SWS_CORE_10304], this function does not participate in overload resolution when C++ exceptions are disabled in the compiler toolchain.
Throws the exception associated with the error code. As per [SWS_CORE_10304], this function does not participate in overload resolution when C++ exceptions are disabled in the compiler toolchain.
gemini-3.8-flash-medium· 2026-10-13