上下文
类
ara::diag::DiagUdsNrcException 在 AUTOSAR Adaptive Platform 中构成了模块
diag 诊断类的核心异常类型(
AUTOSAR_AP_SWS_Diagnostics §8.12.4 “Class: DiagUdsNrcException”)。根据规范
[SWS_DM_00527],它定义了一个标准化的 C++ 异常接口,该接口直接继承自基类异常类
ara::core::Exception。其主要职责在于将来自诊断上下文的错误条件,尤其是 UDS 协议的否定响应码(Negative Response Codes,NRC),作为类型化异常通过编程接口进行传递。在此过程中,该类与封装具体错误代码的
ara::core::ErrorCode 以及必须发起诊断请求并捕获潜在错误的调用方应用层紧密交互(
[SWS_DM_00528])。通过在头文件
ara/diag/diag_uds_nrc_error_domain.h 中声明,该异常直接与关联的 UDS NRC 错误域相绑定(
[SWS_DM_00528])。
上下文图:DiagUdsNrcException 在错误代码、诊断类与应用软件交互中的集成。来源:[SWS_DM_00527]、[SWS_DM_00528]、AUTOSAR_AP_SWS_Diagnostics §8.12.4 “Class: DiagUdsNrcException”
生命周期
ara::diag::DiagUdsNrcException 实例的生命周期始于由诊断类或内部错误处理例程对其进行的显式实例化。根据
[SWS_DM_00528],该类具有一个构造函数
explicit DiagUdsNrcException(ara::core::ErrorCode err) noexcept;,其接收底层错误代码作为参数
err。该构造函数被明确定义为异常安全(
exception safe)且不抛出异常(
noexcept)(
[SWS_DM_00528]),从而确保在错误路径中的对象创建期间不会发生二次异常。此外,根据
[SWS_DM_00528],该创建过程被归类为线程安全(
thread-safe)。创建后,异常实例通常通过 C++ 运行时系统按值抛出。在栈展开期间,对象的所有权保留在运行环境中,直至该异常在相应的
catch 块中被绑定和评估。随着离开异常处理块,该对象通过常规销毁结束其生命周期。
使用路径
典型使用路径包括检测到 UDS NRC 错误、生成异常以及随后由应用程序对其进行评估:
- 应用组件调用
ara::diag 类的诊断功能或服务接口。
- 诊断类在处理过程中确定请求无法成功服务并存在 UDS-NRC,随即生成相应的
ara::core::ErrorCode。
- 通过传入此错误代码,异常
ara::diag::DiagUdsNrcException 经由其构造函数被实例化([SWS_DM_00528])。
- 诊断类从执行上下文中抛出该异常对象(AUTOSAR_AP_SWS_Diagnostics §8.12.4 “Class: DiagUdsNrcException”)。
- 调用方应用程序既可以精确按类型捕获为
ara::diag::DiagUdsNrcException([SWS_DM_00527]),也可以通过基类 ara::core::Exception 进行多态捕获,并访问错误信息。
时序图:DiagUdsNrcException 的典型生成、抛出与捕获时序。来源:[SWS_DM_00527]、[SWS_DM_00528]、AUTOSAR_AP_SWS_Diagnostics §8.12.4 “Class: DiagUdsNrcException”
错误场景
由于
ara::diag::DiagUdsNrcException 本身是用于错误指示的载体,因此错误场景主要涉及异常生成过程中的健壮性与并发性:
- 健壮的对象生成:通过指定为
noexcept 和 exception safe([SWS_DM_00528]),排除了在构造过程中抛出次级异常的可能性。这可以防止在关键错误处理路径中发生致命的运行时中止,如 std::terminate。
- 错误代码的有效性:作为实例化的前置条件,必须有一个有效的
ara::core::ErrorCode 可供使用([SWS_DM_00528])。该错误代码通常来源于由 ara/diag/diag_uds_nrc_error_domain.h 定义的错误域。
- 并行诊断处理:由于构造函数被指定为
thread-safe([SWS_DM_00528]),多个线程可以并发生成诊断异常,而在异常对象的初始化过程中不会出现竞态条件。
gemini-3.8-flash-low· 2026-10-13 · 德文原文