Служит для сигнализации об ошибках через исключения с кодом ошибки при предоставлении диагностических сервисов.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 3b24259852fbПроисхождениеОткрытые вопросы (3)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит для сигнализации об ошибках через исключения с кодом ошибки при предоставлении диагностических сервисов.
Класс ara::diag::DiagOfferException служит специальным типом исключения C++, генерируемым диагностическими классами AUTOSAR Adaptive Platform для сигнализации об ошибках ([SWS_DM_00985]). Он наследуется от ara::core::Exception и потокобезопасно инстанцируется через конструктор noexcept с указанием ara::core::ErrorCode ([SWS_DM_00986]). Исключение, предположительно, возникает преимущественно при неудачной попытке предоставления диагностических сервисов и должно перехватываться вызывающим приложением для предотвращения неконтролируемого аварийного завершения процесса. Вопрос (открытый)
Контекст
Класс ara::diag::DiagOfferException представляет собой центральный тип исключения диагностического модуля в рамках AUTOSAR Adaptive Platform ([SWS_DM_00985], SWS Diagnostics §8.11.6 «Class: DiagOfferException»). Согласно его спецификации, речь идет об исключении, генерируемом диагностическими классами ("Exception type thrown by Diag classes"). Класс публично наследуется от базового класса ara::core::Exception и подключается в приложениях через заголовочный файл ara/diag/diag_error_domain.h ([SWS_DM_00986]).
К основным партнерам по взаимодействию относятся функциональные классы управления диагностикой, базовая архитектура ошибок AUTOSAR Adaptive (представленная ara::core::ErrorCode), а также прикладное программное обеспечение, предоставляющее диагностические сервисы. Имя класса указывает на то, что это исключение, вероятно, применяется тогда, когда попытка предоставления или регистрации диагностических сервисов соответствующими Diag-классами завершается неудачей (Интерпретация). Вопрос Q-47046201c9fd38c3 (открытый)
Жизненный цикл
Инстанцирование ara::diag::DiagOfferException осуществляется через его единственный специфицированный конструктор explicit DiagOfferException(ara::core::ErrorCode err) noexcept ([SWS_DM_00986], SWS Diagnostics §8.11.6.1.1.1 «DiagOfferException»). При этом исключение напрямую связывается с конкретным кодом ошибки. Поскольку конструктор объявлен как noexcept, гарантируется, что при создании самого объекта исключения не возникнет никаких других ошибок или рекурсивных исключений ([SWS_DM_00986]).
В плане жизненного цикла класс подчиняется стандартным механизмам обработки исключений C++: он размещается в памяти исключений среды выполнения, передается по стеку вызовов и автоматически освобождается после завершения обрабатывающего блока catch. Согласно спецификации, конструирование является потокобезопасным и exception-safe ([SWS_DM_00986]). Объект исключения после своего создания не имеет сложных внутренних смен состояний; вероятно, он функционирует как неизменяемая оболочка для транспортировки переданного кода ошибки (Интерпретация). Вопрос Q-09c6e0ad610717e9 (открытый)
Путь использования
Типичный процесс использования ara::diag::DiagOfferException делится на следующие фазы:
Приложение вызывает метод диагностического класса для предоставления диагностического сервиса или порта (операция Offer).
Диагностический класс во время инициализации или регистрации фиксирует ошибочное условие и инстанцирует подходящий ara::core::ErrorCode.
Диагностический класс конструирует экземпляр ara::diag::DiagOfferException с передачей этого кода ошибки ([SWS_DM_00986]) и генерирует это исключение.
Вызывающее прикладное программное обеспечение перехватывает исключение в рамках блока try-catch.
Вызывающая сторона извлекает код ошибки из исключения и инициирует подходящие стратегии обработки сбоя или повтора.
Диаграмма последовательности: типичный процесс при сигнализации и обработке ошибки посредством DiagOfferException. Источники: [SWS_DM_00985], [SWS_DM_00986].
Сценарии ошибок
ara::diag::DiagOfferException сам по себе служит механизмом сигнализации для ошибочных ситуаций. В качестве предусловия для инстанцирования вызывающий экземпляр должен располагать допустимым ara::core::ErrorCode ([SWS_DM_00986]). Поскольку конструктор определен как noexcept, инстанцирование ни при каких обстоятельствах не приводит ко вторичным исключениям ([SWS_DM_00986]).
Если сгенерированное исключение DiagOfferException не перехватывается прикладным программным обеспечением, это по умолчанию приводит к вызову std::terminate и тем самым к неконтролируемому аварийному завершению процесса. В силу наследования от ara::core::Exception, вероятно, предусмотрено, что наряду со специализированным перехватом ara::diag::DiagOfferException может срабатывать и общий обработчик для ara::core::Exception (Интерпретация), обеспечивая надежную отказоустойчивость на уровне процесса. Вопрос Q-d0cf602a077c4dae (открытый)
Настоящее руководство основано на спецификации AUTOSAR Adaptive R25-11 (модуль diag) и было сгенерировано автоматически для autodocs.
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал