Sinaliza erros em operações de diagnóstico de forma síncrona como exceção com código de erro para o chamador.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: a149cf644e7fProcedênciaPerguntas em aberto (2)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Sinaliza erros em operações de diagnóstico de forma síncrona como exceção com código de erro para o chamador.
A classe de exceção ara::diag::DiagReportingException serve para a sinalização síncrona de estados de erro que ocorrem durante operações dentro de classes de diagnóstico da Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). Ela é instanciada explicitamente com um ara::core::ErrorCode específico e o transporta para a aplicação chamadora [SWS_DM_00988] para análise da causa do erro. Como restrição central, seu construtor é especificado como noexcept, exception safe e thread-safe, garantindo uma criação sem erros mesmo em contextos de execução concorrentes. Instâncias não tratadas devem ser evitadas, pois levam ao encerramento imediato do programa.
Contexto
A classe ara::diag::DiagReportingException constitui a classe de exceção central para procedimentos de notificação e relatório dentro do cluster funcional de diagnóstico (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). Ela é definida como uma especialização pública de ara::core::Exception e representa estados de erro específicos que ocorrem durante a interação com classes de diagnóstico [SWS_DM_00987]. Em uma aplicação AUTOSAR Adaptive, a exceção atua como elo de ligação entre os serviços de diagnóstico internos e o software aplicativo chamador: se ocorrer um erro durante uma notificação de diagnóstico, DiagReportingException encapsula esse estado e o transporta sincronicamente pela pilha de chamadas até o chamador. Entre os parceiros primários de interação estão as classes de API de diagnóstico do módulo diag, que instanciam e disparam a exceção em caso de erro, bem como rotinas de tratamento de erros de nível superior da aplicação, que capturam e processam o erro de diagnóstico.
Ciclo de vida
A instanciação de ara::diag::DiagReportingException ocorre explicitamente pela passagem de um código de erro do tipo ara::core::ErrorCode para o construtor [SWS_DM_00988]. A declaração do construtor como explicit impede conversões implícitas de códigos de erro em objetos de exceção e assegura que instâncias de exceção sejam sempre criadas de forma deliberada [SWS_DM_00988].
Como o construtor possui a especificação noexcept, é garantido que nenhuma outra exceção possa ocorrer durante a própria criação do objeto [SWS_DM_00988]. Isso é essencial para caminhos de erro a fim de evitar uma cascata de exceções durante o tratamento de erros. Além disso, o processo de construção é classificado explicitamente como seguro contra exceções (exception safe) e seguro para threads (thread-safe) [SWS_DM_00988]. Desse modo, múltiplas threads podem criar objetos de exceção separados em paralelo e sem bloqueios mútuos.
O ciclo de vida da exceção está vinculado ao desenrolamento de pilha (stack unwinding) de C++: após a criação na pilha de chamadas, o objeto é propagado pelo mecanismo throw para o bloco catch responsável. Ao sair do manipulador de exceção, o tempo de vida do objeto termina e os recursos alocados são liberados automaticamente.
Caminho de utilização
O caminho de uso regular inicia-se assim que uma notificação ou operação de diagnóstico falha dentro da Adaptive Platform. No fluxo típico, a classe de diagnóstico em execução identifica uma condição não permitida e cria o ara::core::ErrorCode adequado. Em vez de apenas transmitir o erro como valor de retorno, um objeto do tipo ara::diag::DiagReportingException é construído e lançado no caminho síncrono de exceção [SWS_DM_00987].
No lado receptor, a lógica da aplicação intercepta a exceção. Isso ocorre preferencialmente por referência para objetos constantes (const ara::diag::DiagReportingException& ou de forma polimórfica via const ara::core::Exception&). Em seguida, o manipulador extrai o ara::core::ErrorCode embutido para identificar a causa exata do erro e iniciar medidas de recuperação adequadas à situação.
Cenários de erro
Os cenários de falha relacionados a ara::diag::DiagReportingException dizem respeito principalmente à interpretação dos dados de erro fornecidos e à ausência de um tratamento adequado de exceções.
O construtor exige obrigatoriamente um ara::core::ErrorCode válido [SWS_DM_00988]. Devido à inclusão do arquivo de cabeçalho ara/diag/diag_error_domain.h[SWS_DM_00988], o código de erro passado presumivelmente deve ser proveniente do domínio de erros de diagnóstico específico. Pergunta Q-cb8a197542857807 (aberta) Um cenário de erro primário na arquitetura da aplicação reside na interceptação incompleta da exceção: se uma DiagReportingException lançada não for tratada por um bloco catch adequado ao longo da pilha de chamadas, isso levará inevitavelmente à chamada de std::terminate e, consequentemente, à queda do processo da plataforma correspondente. Como o próprio construtor é declarado noexcept[SWS_DM_00988], a instanciação da exceção não pode falhar por falta interna de recursos. Os desenvolvedores devem, portanto, assegurar que os componentes chamadores estejam preparados para a ocorrência de DiagReportingException, especialmente ao utilizar APIs que sinalizam erros via exceções em vez de ara::core::Result.
Este guia foi gerado por uma IA com base na especificação AUTOSAR Adaptive R25-11.
Diagrama de classes UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Original em alemão