Error Message 上报宏使用规范【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本文档用于说明 ErrMsg 上报宏的参数风格、控制流特性、适用场景和选择规则帮助开发者根据错误码与业务场景选择正确的上报宏。背景知识错误记录的两种方式Runtime 代码中存在两种错误记录方式RT_LOG 日志通过RT_LOG_*宏记录日志仅写入日志文件调用方无法程序化获取。ErrMsg 上报通过 ErrorManager 上报结构化错误信息调用方可程序化获取。ErrMsg 的完整流程错误发生 → 调用上报宏 → ErrorManager 存储错误 → 调用方获取错误信息上报代码中调用 ErrMsg 上报宏如COND_RETURN_AND_MSG_OUTER存储宏最终调用 ErrorManager 的核心函数将错误信息存储到线程局部存储获取内部调用方通过GetErrMgrErrorMessage()或GetRawErrorMessages()获取外部用户通过aclGetRecentErrMsg()接口获取错误码格式错误码格式为 6 位字符串E 模块标识 4 位数字模块标识模块名称示例错误码ERuntimeEE1001, EE9999HACLEH0007, EH9999IHCCLEI9999LDriverEL9999KProfilingEK9999Z算子公共错误码和算子API执行接口接口错误码EZ9999两类错误内部错误错误码后四位为 9999无 JSON 模板仅记录原始消息用于内部逻辑错误。例如 EE9999、EI9999、EL9999。外部错误错误码后四位为 0001~8999有 JSON 模板定义在error_code.json包含 title/cause/solution面向用户展示。例如 EE1001、EH0007。四个核心上报函数代码中封装了大量 ErrMsg 上报宏这些宏最终都会调用 ErrorManager 的四个核心函数ReportInterErrMessage()上报内部错误EX9999直接存储原始消息ReportErrMessage()上报外部错误EX0001~EX8999通过 args_map 填充 JSON 模板ATCReportErrMessage()上报外部错误通过 key/value 向量填充 JSON 模板与上一个功能相同参数形式不同ReportErrMsgWithoutTpl()上报用户自定义错误EU0000~EU9999无模板直接存储消息一、Runtime 模块代码目录src/runtime/1. 宏表格列定义后续各节中的宏表格均使用以下列来描述每个宏的特性各列的含义和可选值定义如下返回类型值含义rtError_t返回 Runtime 内部错误码void无返回值return;ACL错误码(rt转换)调用GetRtExtErrCodeAndSetGlobalErr()将 rtError_t 转换为 ACL 外部错误码并设置全局错误码无仅上报或跳转不通过 return 返回值条件类型值含义自定义条件调用者传入任意布尔表达式通常带unlikely()空指针检查PTR nullptr零值检查PARAM 0U错误码!NONE检查ERRCODE ! RT_ERROR_NONE无条件无条件上报不检查条件PROC值含义是宏在上报前执行一段任意语句如释放资源、关闭句柄等对应宏名中通常含PROC否宏不执行前置语句GOTO值含义是宏在上报后执行goto LABEL跳转到错误处理标签同时可能给 ERROR 变量赋值否宏不执行 goto设置全局错误码值含义是宏在上报时调用GetRtExtErrCodeAndSetGlobalErr()将 rtError_t 转换为 ACL 错误码并设置全局错误码否宏仅上报 ErrMsg不设置全局错误码推荐等级| 值 | 含义 | |----|------| | 推荐 | 主力宏场景明确新代码优先使用 | | 特定场景 | 有明确适用场景但不如推荐宏通用 | | 谨慎使用 | 有约束或与推荐宏重叠需确认后再用 | | 禁止使用 | 存在设计缺陷禁止在新代码中使用 |2. 字符串格式说明ErrMsg 宏有两种字符串传入方式使用时必须区分printf 风格_INNER 宏使用_INNER系列宏如COND_RETURN_AND_MSG_INNER使用 printf 风格的format, ...参数。开发者直接传入格式化字符串和可变参数COND_RETURN_AND_MSG_INNER(ptr nullptr, RT_ERROR_INVALID_VALUE, Init failed, devId%u, size%zu, devId, size);禁止先用std::string拼接再传入// 错误用法会导致 .so 文件膨胀 std::string msg Init failed, devId std::to_string(devId); COND_RETURN_AND_MSG_INNER(ptr nullptr, RT_ERROR_INVALID_VALUE, %s, msg.c_str());如需预格式化字符串如消息内容需要动态拼接必须使用RtFmtMsg函数// 正确用法 COND_RETURN_AND_MSG_INNER(ptr nullptr, RT_ERROR_INVALID_VALUE, %s, RtFmtMsg(Init failed, devId%u, reason%s, devId, reason).c_str());结构化参数风格_OUTER 宏使用_OUTER系列宏如COND_RETURN_AND_MSG_OUTER使用结构化参数每个参数由ErrorCodeProcess自动转换为 string匹配error_code_meta.h中 X-macro 模板的%s占位符。参数个数必须与模板一致。COND_RETURN_AND_MSG_OUTER(ret ! RT_ERROR_NONE, RT_ERROR_FEATURE_NOT_SUPPORT, ErrorCode::EE1006, __func__, stream mode switching);对于需要动态拼接的 reason 参数同样禁止直接用std::string相加应使用RtFmtMsg// 错误用法会导致 .so 文件膨胀 COND_RETURN_AND_MSG_OUTER(..., ErrorCode::EE1016, __func__, Changing stream std::to_string(id) is not supported); // 正确用法 COND_RETURN_AND_MSG_OUTER(..., ErrorCode::EE1016, __func__, RtFmtMsg(Changing stream %u is not supported, id));为什么禁止std::string相加std::string拼接会在编译产物中生成大量临时字符串对象和模板实例化代码导致 .so 文件显著膨胀。RtFmtMsg使用栈上char[]缓冲区 snprintf编译产物更紧凑。3. 外部错误码宏外部错误码有 JSON 模板用户可通过GetErrMgrErrorMessage()获取带 title/cause/solution 的格式化消息。EE1003 - Invalid_Argument参数值校验参数值不合法时使用。宏自动注入__func__和参数名字符串开发者只需传入参数值和期望值。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏COND_RETURN_AND_MSG_OUTER_WITH_PARAMrtError_t自定义条件否否否推荐—COND_RETURN_AND_MSG_OUTER_WITH_PARAM_NAMErtError_t自定义条件否否否推荐—ZERO_RETURN_AND_MSG_OUTERrtError_t零值否否否推荐—COND_RETURN_EXT_ERRCODE_AND_MSG_OUTER_WITH_PARAMACL错误码(rt转换)自定义条件否否是推荐—COND_RETURN_EXT_ERRCODE_AND_MSG_OUTER_WITH_PARAM_NAMEACL错误码(rt转换)自定义条件否否是推荐—RT_LOG_OUTER_MSG_INVALID_PARAM无无条件否否否特定场景—EE1004 - Invalid_Argument_Null_Pointer空指针检查专用。宏自动使用#PTR参数名字符串化无需手动传入。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏NULL_PTR_RETURN_MSG_OUTERrtError_t空指针否否否推荐—PARAM_NULL_RETURN_ERROR_WITH_EXT_ERRCODEACL错误码(rt转换)空指针否否是推荐—EE1010 - Execution_Error_Invalid_Contextstream/model/context 等对象的归属关系校验。宏自动注入__func__和对象名。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏COND_RETURN_AND_MSG_INVALID_CONTEXTrtError_t自定义条件否否否推荐—RT_LOG_OUTER_MSG_INVALID_CONTEXT无无条件否否否特定场景—EE1013 - Resource_Error_Insufficient_Host_Memory内存分配失败专用。bufSize为请求分配的内存大小。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏COND_PROC_RETURN_AND_MSG_ALLOC_FAILEDrtError_t自定义条件是否否推荐—EE1017 - Invalid_Argument预留参数校验预留参数校验使用。param为参数名reason为不合法原因。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏COND_RETURN_AND_MSG_RESERVED_PARAMrtError_t自定义条件否否否推荐—RT_LOG_OUTER_MSG_RESERVED_PARAM无无条件否否否特定场景—EE1001 - Invalid_Argument禁止使用。EE1001 错误码及其专用宏COND_RETURN_OUT_ERROR_MSG_CALL、COND_PROC_RETURN_OUT_ERROR_MSG_CALL禁止在新代码中使用仅用于兜底逻辑。通用外部错误码主力封装宏适用于 EE1005~EE1021、EE2002、WE0001 等没有专用宏的外部错误码。调用者传入ErrorCode枚举值和对应参数。| 宏名 | 返回类型 | 条件类型 | PROC | GOTO | 设置全局错误码 | 推荐等级 | 替代宏 | |------|---------|---------|------|------|--------------|---------|--------| | COND_RETURN_AND_MSG_OUTER | rtError_t | 自定义条件 | 否 | 否 | 否 | 推荐 | — | | COND_RETURN_VOID_AND_MSG_OUTER | void | 自定义条件 | 否 | 否 | 否 | 推荐 | — | | COND_PROC_RETURN_AND_MSG_OUTER | rtError_t | 自定义条件 | 是 | 否 | 否 | 推荐 | — | | COND_PROC_RETURN_VOID_AND_MSG_OUTER | void | 自定义条件 | 是 | 否 | 否 | 推荐 | — | | COND_GOTO_MSG_OUTER | 无 | 自定义条件 | 否 | 是 | 否 | 推荐 | — | | COND_RETURN_EXT_ERRCODE_AND_MSG_OUTER | ACL错误码(rt转换) | 自定义条件 | 否 | 否 | 是 | 推荐 | — | | COND_RETURN_EXT_WARNCODE_AND_MSG_OUTER | ACL错误码(rt转换) | 自定义条件 | 否 | 否 | 是 | 推荐 | — |通用外部错误码底层上报宏直接调用 ErrorManager 或底层日志接口。适用于高层宏无法满足需求的特殊场景部分宏已有更好的替代方案不应直接使用。| 宏名 | 错误码填入方式 | 实际错误码 | 上报类型 | 推荐等级 | 替代宏 | |------|--------------|-----------|---------|---------|--------| | RT_LOG_OUTER_MSG | 显式输入 | 字符串错误码 | 外部 | 特定场景 | — | | RT_LOG_OUTER_MSG_IMPL | 显式输入 | ErrorCode 枚举 | 外部 | 特定场景 | — | | RT_LOG_OUTER_MSG_WITH_FUNC | 显式输入 | ErrorCode 枚举 | 外部 | 特定场景 | — | | REPORT_INPUT_ERROR | 显式输入 | 字符串错误码 | 外部 |不能直接使用| — | | REPORT_ENV_ERROR | 显式输入 | 字符串错误码 | 外部 |不能直接使用| — |API层兜底宏仅用于 rt 接口层的兜底打屏其他场景禁用映射规则内部通过FuncErrorReason()的 switch 映射rtError_t上报错误码上报方式RT_ERROR_INVALID_VALUEEE1001RT_LOG_OUTER_MSGprintfRT_ERROR_CONTEXT_NULLEE1001RT_LOG_OUTER_MSGprintfRT_ERROR_FEATURE_NOT_SUPPORTEE1001RT_LOG_OUTER_MSGprintfRT_ERROR_INVALID_HANDLEEE1017RT_LOG_OUTER_MSG_IMPL独立参数RT_ERROR_STREAM_SYNC_TIMEOUTEE1002RT_LOG_OUTER_MSGprintfdefaultEE9999RT_LOG_CALL_MSG(ERR_MODULE_GE)| 宏名 | 返回类型 | 条件类型 | PROC | GOTO | 设置全局错误码 | 推荐等级 | 替代宏 | |------|---------|---------|------|------|--------------|---------|--------| | ERROR_RETURN_WITH_EXT_ERRCODE | ACL错误码(rt转换) | 错误码!NONE | 否 | 否 | 是 | 推荐 | — | | REPORT_FUNC_ERROR_REASON | 无 | 无 | 否 | 否 | 否 | 不能直接使用 | ERROR_RETURN_WITH_EXT_ERRCODE |4. 内部错误码宏内部错误码无 JSON 模板。一次错误获取中首错只展示一条优先取第一条外部错误码作为首错带 title/cause/solution其余全部进入 TraceBack若本次上报全部为内部错误码则第一条作为首错格式XX9999: Inner Error!其余进入 TraceBack。_INNER 系列EE9999映射到 EE9999或 WE9999适用于 Runtime 内部逻辑错误。使用 printf 风格格式化字符串。映射规则_INNER后缀宏通过RT_LOG_LEVEL_TO_ERR_MSG[]数组映射RT_LOG_ERROR → EE9999RT_LOG_WARNING → WE9999其他 → INVALID_HEAD异常不应使用。宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏NULL_STREAM_PTR_RETURN_MSGrtError_t空指针否否否推荐—NULL_PTR_RETURN_MSGrtError_t空指针否否否推荐—NULL_PTR_PROC_RETURN_ERROR_MSG_INNERrtError_t空指针是否否推荐—NULL_PTR_GOTO_MSG_INNER无空指针否是否推荐—ZERO_RETURN_MSGrtError_t零值否否否谨慎使用COND_RETURN_AND_MSG_INNER 或 ZERO_RETURN_AND_MSG_OUTERCOND_RETURN_AND_MSG_INNERrtError_t自定义条件否否否推荐—COND_RETURN_VOID_AND_MSG_INNERvoid自定义条件否否否推荐—COND_AND_MSG_INNER无自定义条件否否否推荐—COND_PROC_RETURN_ERROR_MSG_INNERrtError_t自定义条件是否否推荐—COND_RETURN_ERROR_MSG_INNERrtError_t自定义条件否否否谨慎使用COND_RETURN_AND_MSG_INNERCOND_GOTO_ERROR_MSG_AND_ASSIGN_INNER无自定义条件否是否推荐—COND_PROC_GOTO_MSG_INNER无自定义条件是是否推荐—ERROR_RETURN_MSG_INNERrtError_t错误码!NONE否否否推荐—ERROR_PROC_RETURN_MSG_INNERrtError_t错误码!NONE是否否推荐—ERROR_GOTO_MSG_INNER无错误码!NONE否是否推荐—ERROR_PROC_GOTO_MSG_INNER无错误码!NONE是是否推荐—COND_RETURN_EXT_ERRCODE_AND_MSG_INNERACL错误码(rt转换)自定义条件否否是推荐—_CALL 系列MODULE_TYPE 映射通过 MODULE_TYPE 映射到对应模块的内部错误码适用于跨模块错误上报标记错误来源。映射规则_CALL后缀宏通过RT_MODULE_TYPE_TO_ERR_MSG[]数组映射MODULE_TYPE映射错误码说明ERR_MODULE_AICPUE39999AI CPU 模块ERR_MODULE_DRVEL9999驱动模块ERR_MODULE_HCCLEI9999HCCL 模块ERR_MODULE_GEEE9999GE 模块不推荐新增使用ERR_MODULE_PROFILEEK9999Profiling 模块ERR_MODULE_TBEEZ9999TBE 模块ERR_MODULE_SYSTEMEE9999系统模块ERR_MODULE_RTSEE9999RTS 模块ERR_MODULE_FEE29999FE 模块ERR_MODULE_AICPU_TIMEOUTE30008AI CPU 超时ERR_MODULE_INVALID_ARGUMENTEE1001非法参数宏名返回类型条件类型PROCGOTO设置全局错误码推荐等级替代宏NULL_PTR_PROC_RETURN_ERROR_MSG_CALLrtError_t空指针是否否特定场景—NULL_PTR_GOTO_MSG_CALL无空指针否是否特定场景—COND_RETURN_ERROR_MSG_CALLrtError_t自定义条件否否否特定场景—COND_PROC_RETURN_ERROR_MSG_CALLrtError_t自定义条件是否否特定场景—COND_GOTO_ERROR_MSG_AND_ASSIGN_CALL无自定义条件否是否特定场景—COND_PROC_GOTO_MSG_CALL无自定义条件是是否特定场景—ERROR_RETURN_MSG_CALLrtError_t错误码!NONE否否否特定场景—ERROR_PROC_RETURN_MSG_CALLrtError_t错误码!NONE是否否特定场景—ERROR_GOTO_MSG_CALL无错误码!NONE否是否特定场景—ERROR_PROC_GOTO_MSG_CALL无错误码!NONE是是否特定场景—内部错误码底层上报宏直接调用 ErrorManager 或底层日志接口。适用于高层宏无法满足需求的特殊场景部分宏已有更好的替代方案不应直接使用。宏名错误码填入方式实际错误码上报类型推荐等级替代宏RT_LOG_INNER_MSG映射RT_LOG_LEVEL内部特定场景—RT_LOG_CALL_MSG映射MODULE_TYPE内部特定场景—RT_LOG_CALL_MSG_NO_RT_LOG映射MODULE_TYPE内部不能直接使用RT_LOG_CALL_MSGREPORT_INNER_ERROR显式输入字符串错误码内部不能直接使用RT_LOG_INNER_MSGREPORT_CALL_ERROR显式输入字符串错误码内部不能直接使用RT_LOG_CALL_MSG5. 快速选择指南建议按照下面的方式选择符合自己要求的宏我要上报的错误码是否有专用的宏 ├─ 是EE1003/EE1004/EE1010/EE1013/EE1017见第3节 │ └─ 专用宏是否能满足我的场景根据 PROC/GOTO/返回类型/设置全局错误码 判断 │ ├─ 是 → 使用专用宏 │ └─ 否 │ └─ 通用宏是否能满足我的场景 │ ├─ 是 → 使用通用宏见第3节「通用外部错误码主力封装宏」 │ └─ 否 → 使用底层宏见第3节「通用外部错误码底层上报宏」 │ └─ 否EE1001 禁止使用EE1005~EE1023、EE2002、WE0001 等无专用宏 └─ 通用宏是否能满足我的场景 ├─ 是 → 使用通用宏见第3节「通用外部错误码主力封装宏」 └─ 否 → 使用底层宏见第3节「通用外部错误码底层上报宏」对于内部错误码EE9999 / MODULE_TYPE 映射选择方式类似我要上报内部错误码 ├─ 当前代码属于 Runtime 自身模块 → 使用 _INNER 系列见第4节 │ └─ _INNER 主力宏是否能满足我的场景 │ ├─ 是 → 使用 _INNER 主力宏 │ └─ 否 → 使用 _INNER 底层宏见第4节「内部错误码底层上报宏」 │ └─ 当前代码调用了其他模块GE/DRV/HCCL 等需要标记错误来源 → 使用 _CALL 系列 对应 ERR_MODULE_xxx见第4节对于 API 层兜底场景仅用于 rt 接口层我要在 rt API 入口函数中做兜底返回 └─ 使用 ERROR_RETURN_WITH_EXT_ERRCODE见第3节「API层兜底宏」二、ACL 模块代码目录src/acl/组织原则以 EH 错误码为主维度专用宏优先于通用宏。1. 宏表格列定义后续各节中的宏表格均使用以下列来描述每个宏的特性各列的含义和可选值定义如下返回类型值含义aclError返回 ACL 错误码如ACL_ERROR_INVALID_PARAMnullptr返回空指针void无返回值return;原始返回值透传被调用函数的返回值如 rtError_t、ge::Status无仅上报日志不改变控制流条件类型值含义空指针检查val nullptr参数值检查参数值是否合法范围、正负、等值等返回值!OK检查被调用函数的返回值是否非成功自定义条件调用者传入任意布尔表达式无条件无条件上报不检查条件上报 ErrMsg值含义EH00xx通过AclErrorLogManager::ReportInputError()上报预定义 EH 错误码EH9999通过AclErrorLogManager::ReportInnerError()或ReportCallError()上报内部错误2. EH 错误码参考常量名错误码用途INVALID_PARAM_MSGEH0001非法参数通用INVALID_NULL_POINTER_MSGEH0002空指针通用INVALID_PATH_MSGEH0003非法路径INVALID_FILE_MSGEH0004非法文件INVALID_AIPP_MSGEH0005非法 AIPP 参数UNSUPPORTED_FEATURE_MSGEH0006不支持的功能INVALID_VALUE_MSGEH0007非法值带期望值NULL_POINTER_FUNC_MSGEH0008空指针函数参数INVALID_PARAM_REASON_MSGEH0009非法参数带原因ALLOC_MEMORY_FAILED_MSGEH0010内存分配失败UNSUPPORTED_SYSTEM_MSGEH0011不支持的系统INVALID_PARAM_NO_VALUE_MSGEH0012非法参数无值STANDARD_FUNC_FAILED_MSGEH0013标准函数调用失败硬编码EH9999内部错误/调用错误兜底3. 空指针检查宏EH0008检查指针是否为nullptr满足时上报 EH0008 错误并返回。这是 ACL 层使用最频繁的宏族472 处使用。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORTACL_ERROR_INVALID_PARAM空指针EH0008推荐—ACL_REQUIRES_NOT_NULL_RET_INPUT_REPORT调用者指定空指针EH0008推荐—ACL_REQUIRES_NOT_NULL_RET_NULL_INPUT_REPORTnullptr空指针EH0008推荐—ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT_WITH_PRAM_NAMEACL_ERROR_INVALID_PARAM空指针EH0008特定场景—说明ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT是首选宏返回ACL_ERROR_INVALID_PARAM并上报 EH0008_WITH_PRAM_NAME变体用于参数名与变量名不同的场景4. 参数值校验宏EH0007 / EH0009 / EH0012EH0007 - 非法值带期望值参数值不合法时使用。宏自动注入__func__、参数值、参数名和期望值。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_CHECK_INVALID_VALUE_WITH_EXPECTACL_ERROR_INVALID_PARAM参数值取反EH0007推荐—ACL_CHECK_INVALID_VALUE_WITH_EXPECT_RET调用者指定参数值取反EH0007推荐—ACL_CHECK_INVALID_VALUE_WITH_DESC调用者指定参数值取反EH0007特定场景—ACL_REQUIRES_PARAM_EQUAL_REPORTACL_ERROR_INVALID_PARAM参数值不等EH0007推荐—ACL_REQUIRES_POSITIVE_REPORTACL_ERROR_INVALID_PARAM参数值0EH0007推荐—说明ACL_CHECK_INVALID_VALUE_WITH_EXPECT系列的条件是取反的if (!(condition))表示条件不满足时报错ACL_REQUIRES_PARAM_EQUAL_REPORT用于参数必须等于某个特定值的场景ACL_REQUIRES_POSITIVE_REPORT用于参数必须为正数的场景EH0009 - 非法参数带原因参数非法且需要详细说明原因时使用。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_CHECK_INVALID_PARAM_WITH_REASONACL_ERROR_INVALID_PARAM自定义条件EH0009推荐—ACL_CHECK_INVALID_PARAM_WITH_REASON_RET调用者指定自定义条件EH0009推荐—ACL_CHECK_INVALID_PARAM_WITH_REASON_DESC_RET调用者指定自定义条件EH0009特定场景—ACL_CHECK_RESERVED_PARAM_REPORT_RET调用者指定参数值不等EH0009推荐—说明ACL_CHECK_RESERVED_PARAM_REPORT_RET专用于预留参数校验参数必须等于某个值如flags 0ACL_CHECK_INVALID_PARAM_WITH_REASON_DESC_RET用于参数名和参数值需要手动传入非#param字符串化的场景EH0012 - 非法参数无值参数非法但不需要展示参数值时使用。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_CHECK_INVALID_PARAM_NO_VALUEACL_ERROR_INVALID_PARAM自定义条件取反EH0012推荐—5. 文件校验宏EH0004文件路径无效或文件打开失败时使用。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_CHECK_INVALID_FILE_MSG_RET调用者指定自定义条件EH0004推荐—ACL_CHECK_FILE_OPEN_FAILED调用者指定自定义条件取反EH0004推荐—说明ACL_CHECK_FILE_OPEN_FAILED自动获取strerror(errno)作为失败原因ACL_CHECK_INVALID_FILE_MSG_RET需要手动传入 reason6. 内存分配校验宏EH0010内存分配失败时使用。宏名返回类型条件类型上报 ErrMsg推荐等级替代宏ACL_CHECK_MALLOC_RESULT_REPORT_RET调用者指定空指针EH0010推荐—说明上报 EH0010带 buf_size返回类型由调用者指定可以是 nullptr 或错误码7. 内部错误上报宏EH9999上报 EH9999 内部错误码。仅上报不改变控制流宏名返回类型条件类型推荐等级ACL_LOG_INNER_ERROR / ACL_LOG_CALL_ERROR无无条件推荐说明两个宏实现完全相同均调用AclErrorLogManager::ReportInnerError()→REPORT_INNER_ERR_MSG(EH9999, ...)条件检查 上报 返回宏名返回类型条件类型推荐等级ACL_CHECK_WITH_INNER_MESSAGE_AND_RETURN调用者指定自定义条件取反推荐ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORTACL_ERROR_INVALID_PARAM空指针特定场景ACL_CHECK_MALLOC_RESULTACL_ERROR_BAD_ALLOC空指针特定场景ACL_REQUIRES_EQACL_ERROR_INVALID_PARAM参数值不等特定场景ACL_REQUIRES_LEACL_ERROR_INVALID_PARAM参数值大于特定场景说明ACL_CHECK_WITH_INNER_MESSAGE_AND_RETURN条件取反if (!(exp))通用性最强ACL_REQUIRES_NOT_NULL_WITH_INNER_REPORT空指针检查 EH9999如需上报 EH0008 请用第 3 节宏ACL_CHECK_MALLOC_RESULT内存分配失败固定返回ACL_ERROR_BAD_ALLOC如需上报 EH0010 请用ACL_CHECK_MALLOC_RESULT_REPORT_RET返回值检查 上报 透传宏名返回类型条件类型推荐等级ACL_REQUIRES_OK_WITH_INNER_MESSAGE原始返回值返回值!OK推荐ACL_REQUIRES_CALL_RTS_OK原始返回值返回值!NONE推荐ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT原始返回值返回值!NONE推荐ACL_REQUIRES_RTS_OK原始返回值返回值!NONE推荐ACL_REQUIRES_CALL_GE_OK原始返回值返回值!ge::SUCCESS推荐ACL_REQUIRES_EOKACL_ERROR_FAILURE返回值!EOK推荐说明ACL_REQUIRES_CALL_RTS_OK对ACL_ERROR_RT_FEATURE_NOT_SUPPORT特殊处理仅打 WARN 日志不上报 ErrMsg其他失败情况上报 EH9999ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT对ACL_ERROR_RT_FEATURE_NOT_SUPPORT特殊处理仅打 WARN 日志其他失败情况不上报 ErrMsgrt 已兜底打屏acl 不重复上报ACL_REQUIRES_RTS_OK用于 rt 接口已通过ERROR_RETURN_WITH_EXT_ERRCODE兜底打屏的场景acl 侧不重复上报仅返回ACL_GET_ERRCODE_RTS(__ret)不上报 ErrMsgACL_REQUIRES_EOK用于安全函数memcpy_s 等固定返回ACL_ERROR_FAILURE8. 快速选择指南我要上报的错误码是否有专用的宏 ├─ 是空指针→EH0008参数值→EH0007/EH0009/EH0012文件→EH0004内存→EH0010见第3~6节 │ └─ 专用宏是否能满足我的场景根据返回类型/条件类型判断 │ ├─ 是 → 使用专用宏 │ └─ 否 → 手动调用 AclErrorLogManager::ReportInputError()见下方说明 或者 开发新的宏 │ └─ 否EH0001/EH0003/EH0006/EH0011/EH0013 等无专用宏 └─ 手动调用 AclErrorLogManager::ReportInputError()见下方说明 或者 开发新的宏用法示例acl::AclErrorLogManager::ReportInputError(acl::INVALID_PATH_MSG, std::vectorconst char *({path, reason}), std::vectorconst char *({path, file not found}));【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考