Signalisiert SOVD-spezifische Diagnosefehler als ausnahmesichere Exception mit zugeordnetem Fehlercode an Aufrufer.
Kontext
Die Klasse ara::diag::DiagSovdException stellt den zentralen Ausnahmetyp für Service-Oriented Vehicle Diagnostics (SOVD) im Diagnosemodul der AUTOSAR Adaptive Platform dar ([SWS_DM_01807], SWS Diagnostics §8.51.4 „Class: DiagSovdException“). Sie wird von internen Diagnoseklassen ausgelöst, um spezifische Fehlerzustände während der Verarbeitung von SOVD-Anfragen anzuzeigen ([SWS_DM_01807], SWS Diagnostics, S. 69).
Die Klasse leitet öffentlich von der allgemeinen Basisausnahme ara::core::Exception ab ([SWS_DM_01807], SWS Diagnostics §8.51.4). Zu ihren direkten Interaktionspartnern zählen funktionale Diagnoseklassen des Moduls diag, welche Diagnoseanfragen analysieren und bei Fehlern Ausnahmen auslösen, sowie die aufrufende Anwendungssoftware, die solche Ausnahmen abfangen und verarbeiten muss. Deklariert ist die Klasse im Header ara/diag/diag_sovd_error_domain.h zur Erfüllung übergeordneter Architekturanforderungen ([SWS_DM_01808], SWS Diagnostics §8.51.4.1.1.1 „DiagSovdException“).
Lebenszyklus
Die Instanziierung von ara::diag::DiagSovdException erfolgt über einen Konstruktor, der zwingend einen ara::core::ErrorCode als Parameter err entgegennimmt ([SWS_DM_01808], SWS Diagnostics §8.51.4.1.1.1). Dieser Konstruktor ist als explicit deklariert, um implizite Konvertierungen von Fehlercodes in Ausnahmeobjekte zu verhindern, und als noexcept gekennzeichnet ([SWS_DM_01808]).
Hinsichtlich Robustheit und Nebenläufigkeit sichert die Spezifikation zu, dass die Konstruktion vollständig ausnahmesicher (exception safe) und thread-safe ist ([SWS_DM_01808]). Dadurch ist garantiert, dass die Fehlererzeugung selbst in nebenläufigen Diagnoseszenarien keine weiteren Ausnahmen oder Inkonsistenzen hervorruft. Der Lebenszyklus der Ausnahme folgt dem standardmäßigen Stack-Unwinding von C++: Das Objekt wird im Fehlerfall innerhalb einer Diagnosefunktion erzeugt, über Aufrufebenen weitergereicht und beim Verlassen des behandelnden Catch-Blocks determiniert zerstört.
Nutzungspfad
Der typische Ablauf bei der Verwendung von ara::diag::DiagSovdException gliedert sich in folgende Schritte:
- Eine Anwendung initiiert eine SOVD-bezogene Diagnoseoperation an einer Schnittstelle des Moduls
diag.
- Die zuständige Diagnosekomponente stellt eine fehlerhafte Bedingung fest und erzeugt einen passenden
ara::core::ErrorCode aus der SOVD-Fehlerdomäne ([SWS_DM_01808]).
- Die Komponente konstruiert mittels
explicit DiagSovdException(err) die Ausnahme und wirft diese ([SWS_DM_01808], [SWS_DM_01807]).
- Die Anwendung fängt die Ausnahme über
catch (const ara::diag::DiagSovdException& ex) oder polymorph über const ara::core::Exception& ab, um auf den Fehlerzustand zu reagieren.
Sequenzdiagramm: Aufruf- und Behandlungsabfolge bei Auslösung einer DiagSovdException. Quellen: [SWS_DM_01807], [SWS_DM_01808].
Fehlerszenarien
Als Fehlertransporteur dient die Klasse selbst der Behandlung von Ausnahmezuständen ([SWS_DM_01807]). Als formale Vorbedingung für die Erzeugung gilt die Bereitstellung eines initialisierten ara::core::ErrorCode ([SWS_DM_01808]). Da der Konstruktor als noexcept deklariert ist, treten bei der Objekterzeugung selbst keine Ausnahmen auf ([SWS_DM_01808]).
Interpretation: Vermutlich kapselt die Instanz den übergebenen Fehlercode dauerhaft, sodass nachgelagerte Fehlerbehandler diesen über geerbte Funktionen von ara::core::Exception inspizieren können. Frage Q-332b95b96849e379 (offen) In Systemkonfigurationen mit deaktivierten C++-Ausnahmen dürfte die Diagnosekomponente alternative Fehlermechanismen bevorzugen, während DiagSovdException den dezidierten Pfad für Ausnahmebehandlungen darstellt.
Dieser Leitfaden basiert auf der Spezifikation AUTOSAR Adaptive Platform R25-11 und fasst die Anforderungen an die Ausnahmebehandlung von SOVD zusammen.
gemini-3.8-flash-medium· 2026-10-13