Dient als threadsichere Ausnahme zur Signalisierung und Weitergabe von UDS-NRC-Fehlern in Diagnoseklassen.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 6ef167bbc303HerkunftOffene Fragen (2)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Dient als threadsichere Ausnahme zur Signalisierung und Weitergabe von UDS-NRC-Fehlern in Diagnoseklassen.
Die Klasse ara::diag::DiagUdsNrcException dient als standardisierte Ausnahme zur Signalisierung von UDS-NRC-Fehlern durch Diagnoseklassen der AUTOSAR Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.12.4 „Class: DiagUdsNrcException“). Bei Auftreten einer entsprechenden Fehlerbedingung wird sie mit einem ara::core::ErrorCode instanziiert, geworfen und von der aufrufenden Anwendung zur Fehlerbehandlung abgefangen. Als wesentliche Randbedingung garantiert ihr Konstruktor nach [SWS_DM_00528] vollständige Ausnahmesicherheit (noexcept) sowie Threadsicherheit, wodurch eine verlässliche Objekterzeugung selbst in nebenläufigen Kontexten sichergestellt ist.
Kontext
Die Klasse ara::diag::DiagUdsNrcException bildet in der AUTOSAR Adaptive Platform den zentralen Ausnahmetyp für Diagnoseklassen des Moduls diag (AUTOSAR_AP_SWS_Diagnostics §8.12.4 „Class: DiagUdsNrcException“). Gemäß der Spezifikation [SWS_DM_00527] definiert sie eine standardisierte C++-Ausnahmeschnittstelle, die direkt von der Basisausnahmeklasse ara::core::Exception erbt. Ihre primäre Verantwortung besteht darin, Fehlerbedingungen aus dem Diagnosekontext, insbesondere negative Antwortcodes (Negative Response Codes, NRC) des UDS-Protokolls, als typisierte Ausnahmen über die Programmierschnittstelle zu transportieren. Die Klasse interagiert dabei eng mit ara::core::ErrorCode, welcher den konkreten Fehlercode kapselt, sowie mit den aufrufenden Anwendungsschichten, die Diagnoseanfragen stellen und etwaige Fehler abfangen müssen ([SWS_DM_00528]). Durch die Deklaration im Header ara/diag/diag_uds_nrc_error_domain.h ist die Ausnahme unmittelbar mit der zugehörigen UDS-NRC-Fehlerdomäne verknüpft ([SWS_DM_00528]).
Der Lebenszyklus einer Instanz von ara::diag::DiagUdsNrcException beginnt mit ihrer expliziten Instanziierung durch eine Diagnoseklasse oder eine interne Fehlerbehandlungsroutine. Gemäß [SWS_DM_00528] verfügt die Klasse über einen Konstruktor explicit DiagUdsNrcException(ara::core::ErrorCode err) noexcept;, welcher den zugrundeliegenden Fehlercode als Parameter err entgegennimmt. Dieser Konstruktor ist ausdrücklich als ausnahmesicher (exception safe) und nicht-werfend (noexcept) definiert ([SWS_DM_00528]), wodurch garantiert wird, dass bei der Objekterzeugung im Fehlerpfad keine sekundären Ausnahmen auftreten können. Zudem ist die Erzeugung gemäß [SWS_DM_00528] als threadsicher (thread-safe) klassifiziert. Nach der Erzeugung wird die Ausnahmeinstanz typischerweise per Wert über das C++-Laufzeitsystem geworfen. Der Besitz des Objekts verbleibt während des Stack-Unwindings bei der Laufzeitumgebung, bis die Ausnahme in einem entsprechenden catch-Block gebunden und ausgewertet wird. Mit dem Verlassen des Ausnahmebehandlungsblocks endet der Lebenszyklus des Objekts durch reguläre Zerstörung.
Nutzungspfad
Der typische Nutzungspfad umfasst die Erkennung eines UDS-NRC-Fehlers, die Erzeugung der Ausnahme und deren anschließende Auswertung durch die Anwendung:
Eine Anwendungskomponente ruft eine Diagnosefunktion oder Service-Schnittstelle einer ara::diag-Klasse auf.
Die Diagnoseklasse stellt bei der Verarbeitung fest, dass die Anfrage nicht erfolgreich bedient werden kann und ein UDS-NRC vorliegt, woraufhin sie einen entsprechenden ara::core::ErrorCode erzeugt.
Unter Übergabe dieses Fehlercodes wird die Ausnahme ara::diag::DiagUdsNrcException über ihren Konstruktor instanziiert ([SWS_DM_00528]).
Die aufrufende Anwendung fängt die Ausnahme entweder typgenau als ara::diag::DiagUdsNrcException ([SWS_DM_00527]) oder polymorph über die Basisklasse ara::core::Exception ab und greift auf die Fehlerinformationen zu.
Da ara::diag::DiagUdsNrcException selbst ein Vehikel zur Fehlersignalisierung ist, beziehen sich Fehlerszenarien vor allem auf Robustheit und Nebenläufigkeit bei der Ausnahmeerzeugung:
Robuste Objekterzeugung: Durch die Spezifikation als noexcept und exception safe ([SWS_DM_00528]) ist ausgeschlossen, dass bei der Konstruktion eine sekundäre Ausnahme geworfen wird. Dies verhindert fatale Laufzeitabbrüche wie std::terminate in kritischen Fehlerbehandlungspfaden.
Gültigkeit des Fehlercodes: Als Vorbedingung für die Instanziierung muss ein valider ara::core::ErrorCode bereitstehen ([SWS_DM_00528]). Dieser entstammt typischerweise der durch ara/diag/diag_uds_nrc_error_domain.h definierten Fehlerdomäne.
Parallele Diagnoseverarbeitung: Da der Konstruktor als thread-safe spezifiziert ist ([SWS_DM_00528]), dürfen mehrere Threads nebenläufig Diagnoseausnahmen erzeugen, ohne dass Race Conditions bei der Initialisierung des Ausnahmeobjekts auftreten.
Dieser Leitfaden wurde durch ein KI-System auf Basis der AUTOSAR-Spezifikation R25-11 generiert.
UML-Klassendiagramm
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-medium· 2026-10-13