Синхронно сигнализирует вызывающей стороне об ошибках при диагностических операциях в виде исключения с кодом ошибки.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: a149cf644e7fПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Синхронно сигнализирует вызывающей стороне об ошибках при диагностических операциях в виде исключения с кодом ошибки.
Класс исключения ara::diag::DiagReportingException служит для синхронной сигнализации о состояниях ошибок, возникающих при операциях внутри диагностических классов Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). Он явно инстанцируется с конкретным ara::core::ErrorCode и передает его вызывающему приложению для анализа причин ошибки [SWS_DM_00988]. В качестве ключевого граничного условия его конструктор специфицирован как noexcept, exception safe и thread-safe, что гарантирует безошибочное создание даже в контекстах параллельного выполнения. Необработанных экземпляров необходимо избегать, так как они приводят к немедленному аварийному завершению программы.
Контекст
Класс ara::diag::DiagReportingException образует центральный класс исключений для процедур отправки отчетов и сообщений внутри функционального кластера Diagnostics (AUTOSAR_AP_SWS_Diagnostics §8.11.8 «Class: DiagReportingException»). Он определен как публичная специализация ara::core::Exception и представляет конкретные состояния ошибок, возникающие при взаимодействии с диагностическими классами [SWS_DM_00987]. В приложении AUTOSAR Adaptive исключение выступает связующим звеном между внутренними диагностическими сервисами и вызывающим прикладным ПО: если во время диагностического сообщения возникает ошибка, DiagReportingException инкапсулирует это состояние и синхронно передает его по стеку вызовов вызывающей стороне. К основным партнерам по взаимодействию относятся связанные с диагностикой API-классы модуля diag, инстанцирующие и возбуждающие исключение в случае ошибки, а также вышестоящие процедуры обработки ошибок приложения, которые перехватывают и обрабатывают диагностическую ошибку.
Жизненный цикл
Инстанцирование ara::diag::DiagReportingException осуществляется явно путем передачи кода ошибки типа ara::core::ErrorCode в конструктор [SWS_DM_00988]. Объявление конструктора как explicit предотвращает неявные преобразования кодов ошибок в объекты исключений и гарантирует, что экземпляры исключений всегда создаются осознанно [SWS_DM_00988].
Поскольку конструктор снабжен спецификацией noexcept, гарантируется, что при самом создании объекта не могут возникнуть дополнительные исключения [SWS_DM_00988]. Это имеет решающее значение для путей обработки ошибок, предотвращая каскадирование исключений во время обработки сбоев. Кроме того, процесс конструирования явно классифицирован как безопасный относительно исключений (exception safe) и потокобезопасный (thread-safe) [SWS_DM_00988]. Таким образом, несколько потоков могут параллельно и без взаимных блокировок создавать отдельные объекты исключений.
Жизненный цикл исключения привязан к развертыванию стека C++ (stack unwinding): после создания на стеке вызовов объект распространяется механизмом throw в соответствующий блок catch. С выходом из обработчика исключений время жизни объекта заканчивается, а занятые ресурсы автоматически освобождаются.
Путь использования
Штатный путь использования активируется, как только диагностическое сообщение или операция внутри Adaptive Platform завершается неудачей. В типичном сценарии выполняющий диагностический класс распознает недопустимое условие и создает соответствующий ara::core::ErrorCode. Вместо передачи ошибки исключительно в виде возвращаемого значения, в синхронном пути исключений конструируется и генерируется объект типа ara::diag::DiagReportingException[SWS_DM_00987].
На стороне получателя логика приложения перехватывает исключение. Предпочтительно это делается по ссылке на константные объекты (const ara::diag::DiagReportingException& или полиморфно через const ara::core::Exception&). Затем обработчик извлекает внедренный ara::core::ErrorCode, чтобы определить точную причину ошибки и предпринять соответствующие ситуации меры по восстановлению.
Сценарии ошибок
Сценарии ошибок, связанные с ara::diag::DiagReportingException, касаются прежде всего интерпретации переданных данных об ошибке и отсутствия надлежащей обработки исключений.
Конструктор обязательно требует допустимый ara::core::ErrorCode[SWS_DM_00988]. За счет подключения заголовочного файла ara/diag/diag_error_domain.h[SWS_DM_00988] переданный код ошибки, по всей видимости, преимущественно происходит из специфической предметной области диагностических ошибок. Вопрос Q-cb8a197542857807 (открытый) Основной сценарий ошибки в архитектуре приложения заключается в неполном перехвате исключения: если сгенерированное исключение DiagReportingException не обрабатывается подходящим блоком catch вдоль стека вызовов, это неизбежно приводит к вызову std::terminate и тем самым к аварийному завершению соответствующего процесса платформы. Поскольку сам конструктор объявлен как noexcept[SWS_DM_00988], инстанцирование исключения не может завершиться сбоем из-за внутренней нехватки ресурсов. Поэтому разработчики должны гарантировать, что вызывающие компоненты готовы к возникновению DiagReportingException, в частности при использовании API, сигнализирующих об ошибках через исключения вместо ara::core::Result.
Данное руководство было сгенерировано ИИ на основе спецификации AUTOSAR Adaptive R25-11.
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал