上下文
类 ara::phm::PhmException 充当 AUTOSAR Adaptive Platform 内 Platform Health Management(PHM)的专用异常类型。根据类定义,该类公有继承自 ara::core::Exception,并作为纽带通过标准化 C++ 异常机制将模块 phm 的错误状态传达给调用方系统和应用程序组件。在系统架构中,该类主要在执行监视功能并在违反规则时检测错误状态的运行 PHM 服务与应用程序的上层错误处理例程之间进行交互。通过集成到 ara::core 的基本错误处理模型中,确保了可以统一传递和处理来自 Platform Health Management 的特定于域的错误报告。
生命周期
ara::phm::PhmException 实例的生命周期始于发生错误时的显式实例化。根据 [SWS_PHM_01243],通过包含头文件 ara/phm/phm_error_domain.h 的构造函数 PhmException(ara::core::ErrorCode errorCode) 创建对象。创建被声明为 noexcept,并同时具备“exception safe”和“thread-safe”特性 [SWS_PHM_01243]。这保证了即使在高并发下异常对象本身的实例化也能安全进行,且在任何时候都不会触发意外的次级异常。
该对象封装了传入的 ara::core::ErrorCode,并在创建后具有不可变状态。在栈展开期间,异常对象由运行时环境传输。根据标准 C++ 规则,在离开处理该异常的 catch 块时,销毁以确定性方式进行。解读:实例通常应直接在 throw 表达式中的栈上创建并通过引用(const ara::phm::PhmException&)捕获,因此调用方不需要动态内存管理。 问题 Q-37fc47021a78a0db (未决)
使用路径
典型使用路径始于 Platform Health Management 的受监视操作失败或检测到不可接受的状态偏差。随后,触发的 PHM 函数使用关联的错误代码初始化一个异常对象,并从 [SWS_PHM_01243] 抛出该对象。在调用方,受保护的代码段在 try-catch 块内执行。应用程序大概会特化地作为 ara::phm::PhmException 或多态地通过基类 ara::core::Exception 捕获异常。 问题 Q-54638c0dde7d9195 (未决)在异常处理程序中,提取所包含的 ara::core::ErrorCode 以分析原因并启动相应的对策或紧急运行策略。
时序图:从 PHM 中的错误识别到触发 ara::phm::PhmException 再到处理程序中的评估的典型流程。来源:[SWS_PHM_01243]。
错误场景
ara::phm::PhmException 的核心组成部分是运行时错误代码的传递。作为对象创建的先决条件,必须传入有效的 ara::core::ErrorCode [SWS_PHM_01243]。调用的后置条件是完全初始化的异常对象,该对象以未更改的形式提供传入的错误代码以供查询。
由于构造函数被明确指定为 noexcept 且为“exception safe”[SWS_PHM_01243],因此排除了在构造异常本身期间发生异常的情况。因此不会发生对象创建失败的情况,从而防止了在错误报告期间通过 std::terminate 提前中止。规定的线程安全性(“thread-safe”)还可以在多个线程并行通过各自的异常报告错误状态时防止数据损坏 [SWS_PHM_01243]。因此,错误场景并不影响异常类本身,而是反映了在 PHM 错误域的封装 ara::core::ErrorCode 中编码的业务错误原因。
gemini-3.8-flash-low· 2026-10-13 · 德文原文