上下文
类ara::sm::SmException充当AUTOSAR Adaptive Platform中功能集群State Management的核心异常[SWS_SM_81242]。它定义在头文件ara/sm/sm_error_domain.h中,并公开派生自基础平台异常类ara::core::Exception AUTOSAR_AP_SWS_StateManagement §8.1.4 “Class: SmException”。在文档中,该类的规范状态为DRAFT [SWS_SM_81242]。
在架构上下文中,该类连接了三个核心角色:在状态操作失败时作为触发实例的State Management、作为处理程序的调用Adaptive应用程序,以及提供统一错误处理接口的ara::core底层基础架构。作为错误状态的载体,它用于通过C++异常机制将来自模块sm的错误情况同步传递给上级控制实例。
生命周期
ara::sm::SmException的实例化显式地通过构造函数SmException(ara::core::ErrorCode errorCode) [SWS_SM_81243]执行。该构造函数声明为noexcept,并同时具备异常安全性(exception safe)和线程安全性(thread-safe)特性AUTOSAR_AP_SWS_StateManagement §8.1.4.1.1.1 “SmException”。这保证了即使在并发执行上下文中创建,异常对象本身的创建也不会失败或触发进一步的异常。
创建之后,该实例通常按值(by value)抛出,并在调用上下文中作为常量对象的引用(const ara::sm::SmException&或多态地作为const ara::core::Exception&)被捕获。由于规范未指定特定的析构函数或手动清理例程,按推测,一旦离开负责的处理块,异常对象的销毁即完全遵循C++标准语义和基类ara::core::Exception的机制。 问题 Q-85b1fd2f6082db8e (未决)
使用路径
典型流程始于应用或平台组件向State Management发出状态控制请求。如果请求的状态更改无法在内部完成,或者存在严重的异常错误,则State Management会通过指定相应的ara::core::ErrorCode [SWS_SM_81243]来实例化ara::sm::SmException的实例。
时序图:State Management中使用SmException发出错误信号并进行处理的典型过程。来源:[SWS_SM_81242]、[SWS_SM_81243]。
调用组件在相应的catch块中捕获抛出的异常。通过从基类ara::core::Exception继承的方法,应用程序可以检查封装的ara::core::ErrorCode,以便从语义上对应错误原因,并采取针对性的措施来排除错误或恢复系统状态。
错误场景
类ara::sm::SmException本身并不代表易出错的操作元素,而是State Management内部异常情况的主要载体对象[SWS_SM_81242]。创建的基本前置条件是在构造函数调用时提供一个已初始化的ara::core::ErrorCode对象[SWS_SM_81243]。
如果抛出的ara::sm::SmException在调用栈中未被任何匹配的处理程序捕获,根据C++标准规则,这将导致调用std::terminate,从而造成受影响进程不受控地中止。在要求放弃异常而改用ara::core::Result的实现中,会避免抛出异常;但是,如果异常路径可用,该封装可确保原始错误代码在未被篡改的情况下传输用于错误诊断。
gemini-3.8-flash-low· 2026-10-13 · 德文原文