CANN Runtime RTS 错误码 EE1020(Invalid Argument)深度解析与排查指南
CANN Runtime RTS 错误码 EE1020Invalid Argument深度解析与排查指南【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtimeEE1020 是 CANN Runtime 的 RTSRuntime Service错误码之一专门用于报告 Runtime 内部调用标准库安全函数如memcpy_s、memset_s失败时产生的参数/执行异常。本文以 docs/en/error_code_ref/RTS-Errors/EE1020-Invalid_Argument.md 为主线结合仓库源码中的错误码元数据、日志输出链路、各 API 触发点与单元测试完整拆解 EE1020 的消息格式、触发场景与排查方法帮助你遇到该错误时能快速定位到具体的函数调用与参数问题。一、错误码概览错误码EE1020错误类型Invalid Argument参数无效错误分类RTS ErrorsRuntime 服务错误错误级别Error日志级别DLOG_ERROR见 error_code_meta.h适用模块CANN Runtime 的 Host 侧 API 层与核心任务构建层本质Runtime 内部调用 C 标准库安全函数memcpy_s、memset_s等时函数返回值不等于EOK成功说明发生了缓冲区参数不合法或内存操作失败。这类失败通常意味着传入 API 的缓冲区地址、长度或指针参数存在问题。EE1020 与常见的参数校验错误码如 EE1003、EE1004不同EE1003/EE1004 是 Runtime 对用户传入 API 的参数直接做合法性检查时抛出的而 EE1020 是参数已通过外层校验、但在进入标准安全函数后被底层拒绝时抛出的因此其定位线索藏在消息的“标准函数名 errno 扩展信息”三要素中。二、错误消息格式与占位符语义EE1020 的标准报错格式如下%s failed. Reason: Standard function %s failed. [Errno %s] %s. %s依次出现的占位符%s含义如下占位符参数名含义第 1 个%sfunc1失败的 Runtime 接口名称外层 API如rtGetSocVersion第 2 个%sfunc2失败的标准函数名称内层如memcpy_s第 3 个%sret_code标准函数返回的错误码errno 数值第 4 个%sreason错误原因通常由strerror输出的错误码文本描述第 5 个%sextend_info扩展信息打印涉及的内存地址、缓冲区长度等关键现场数据需要说明的是该格式在源码元数据中注册的完整模板为%s failed. Reason: Standard function %s failed. [Errno %s] %s. %s ErrorCodeEE1020.即实际打印的日志末尾会追加ErrorCodeEE1020.字样便于在日志中直接检索定位参见 error_code_meta.h 与 error_code.json 中的ErrMessage字段。三、典型报错示例逐字段解读原文档给出了一个典型报错rtGetStreamId failed. Reason: Standard function memcpy_s failed. [Errno 1] Operation not permitted. srcsocName, dest3257281401236631602, dest_max1223, count1222.逐字段拆解片段对应参数解读rtGetStreamId failedfunc1外层失败接口为rtGetStreamId获取 Stream IDStandard function memcpy_s failedfunc2内层失败函数为内存拷贝安全函数memcpy_s[Errno 1]ret_codememcpy_s返回错误码 1Operation not permittedreason错误码 1 对应的文本描述errno 1 EPERMsrcsocName, dest...extend_info扩展现场信息源、目标地址、目标缓冲区最大长度dest_max、拷贝字节数count结合源码可以还原这一报错的完整现场rtGetStreamId是获取 Stream 唯一 ID 的接口位于 api_c.cc接口内部通过memcpy_s(dest, destMax, src, count)将字符串如 SOC 版本名socName拷入用户缓冲区当memcpy_s返回值不为EOK时代码构造std::stringstream扩展信息记录dest、src、destMax、count等十六进制/十进制现场值并通过日志宏打印 EE1020 消息后返回失败错误码。扩展信息中的字段是定位的核心dest/dest0x...目标缓冲区地址src/src0x...源数据地址dest_max/destMax/maxLen目标缓冲区最大容量count/length/paraSize实际拷贝字节数。当count dest_max或目标缓冲区为无效地址时memcpy_s将返回非零错误码并触发 EE1020。上例中dest_max1223, count1222恰好说明目标缓冲区容量仅比拷贝长度大 1 字节——这正是典型的目标缓冲区空间不足或长度边界计算错误导致memcpy_s失败的情形。四、源码级实现原理EE1020 从定义到打印的完整链路4.1 错误码元数据定义EE1020 在 error_code_meta.h 中通过 X-Macro 表注册一行即可完成参数名列表、消息模板与日志级别的声明X(EE1020, EE1020, (func1, func2, ret_code, reason, extend_info), %s failed. Reason: Standard function %s failed. [Errno %s] %s. %s ErrorCodeEE1020.\n, DLOG_ERROR)参数名列表(func1, func2, ret_code, reason, extend_info)与文档中的占位符一一对应消息模板带\n结尾保证每条错误日志独立成行日志级别为DLOG_ERROR属于错误级日志。同一表中还并列定义了 EE1001~EE1024、EE2002、EE4002、EZ2001、WE0001 等错误码EE1020 专门预留给了“标准函数调用失败”这一场景。此外error_code.json 中同步维护了对外发布版本的错误码描述errTitle为Invalid_ArgumentArglist为func1, func2, ret_code, reason, extend_info供错误码查询工具与文档生成使用。4.2 枚举与打印函数EE1020 同时被注册进ErrorCode枚举rt_log.h并配套两个核心函数std::vectorstd::string GetParamNames(ErrorCode code); void PrintErrMsgToLog(ErrorCode errCode, const char* file, const int32_t line, const char* func, const std::vectorstd::string values);GetParamNames根据错误码返回参数名列表用于格式化时的参数校验参数数量必须与Arglist一致PrintErrMsgToLog将values按模板顺序填充后打印到日志ProcessErrorCodeImpl负责错误码处理与错误码的最终落盘。各 API 中实际使用的是封装宏RT_LOG_OUTER_MSG_IMPL(ErrorCode::EE1020, func1, func2, retCode, reason, extendInfo)它把调用点函数名、标准函数名、错误码数值、strerror文本与扩展信息统一组装后走PrintErrMsgToLog输出并通过GetRtExtErrCodeAndSetGlobalErr将错误映射为对外返回码如RT_ERROR_SEC_HANDLE、RT_ERROR_INVALID_VALUE。五、EE1020 的主要触发场景源码实测通过检索源码中所有ErrorCode::EE1020的使用点可以归纳出以下触发场景5.1 查询类接口中的字符串拷贝失败api_c_soc.cc 的rtGetSocVersion将 SOC 版本名或UNKNOWN_SOC_TYPE通过memcpy_s拷入用户缓冲区ver。当用户传入的maxLen不足以容纳版本字符串 终止符socName.length() 1U时memcpy_s失败并打印 EE1020返回RT_ERROR_INSTANCE_VERSION或RT_ERROR_SEC_HANDLE。文档示例中rtGetStreamId场景与此同属“字符串/结构体拷入用户缓冲区”类。5.2 Kernel 启动参数配置类接口api_c.cc 的rtConfigureCall当smDesc非空时将调度描述符拷入线程局部的LaunchArgment失败即报 EE1020api_c_kernel.cc 的rtsKernelArgsParaUpdate把内核参数para拷入参数句柄缓冲区memcpy_s(offset, paraSize, para, paraSize)失败时扩展信息打印dest0x..., para0x..., maxLen..., paraSize...api_impl_kernel_args.cc向内核参数句柄追加占位符参数时memcpy_s失败会以Adding placeholder parameters to the kernel parameter handle作为func1报 EE1020api_impl.ccrtSetupArgument设置内核启动参数时对偏移与大小校验后执行memcpy_s失败报 EE1020。5.3 Profiling 与维测接口api_c.cc 的rtsProfTrace将rtProfTraceUserData从用户内存拷入栈上局部变量memcpy_s(data, sizeof(data), userdata, length)若传入的length超过结构体大小或为非法地址即触发api_impl_david.cc获取内存 UCEUncorrectable Error信息时memcpy_s失败以Getting memory uce info为func1报 EE1020。5.4 核心任务构建层除 API 层外任务/命令构建路径中也有 EE1020 的使用点例如 cmo_task.cc、memory_memcpy_async_task.cc、task_to_sqe.cc、arg_manage_ub.cc。从这些文件的使用位置可以推断在向任务队列SQE或 UB 参数区填充数据时若缓冲区长度校验失败同样通过 EE1020 上报——这印证了该错误码“贯穿 Runtime 所有内存拷贝关键路径”的定位。5.5 单元测试验证tests/ut/runtime/runtime/test/rt_error_code_test.cc 对 EE1020 做了系统验证使用 5 个参数调用PrintErrMsgToLog(ErrorCode::EE1020, ...)验证参数数量与格式模板匹配构造rtGetSocVersion场景ErrorCode::EE1020, rtGetSocVersion, memcpy_s, 1, count is greater than dest_max验证memcpy_s返回错误码 1count超过dest_max时消息拼接正确通过GetParamNames(ErrorCode::EE1020)校验参数名列表为 5 项校验参数数量表{ErrorCode::EE1020, 5}确保错误码与期望参数个数绑定参数个数不匹配时会触发断言。这说明 EE1020 的消息格式、参数数量与打印行为均有自动化测试兜底任何一处改动都会在 UT 阶段暴露。六、排查与解决方法EE1020 的官方解决建议是“按照报错提示定位问题”。结合源码建议按以下步骤排查记录完整报错务必保留日志中[Errno N]、错误原因文本与扩展信息src、dest、dest_max、count三个部分缺一不可核对 errno 与原因文本[Errno 1] Operation not permitted安全函数返回EPERM多为内存区域访问权限或缓冲区归属异常[Errno 22] Invalid argument等检查传入的目标缓冲区是否为合法地址、dest_max是否为真实可用容量若原因文本提示count is greater than dest_max说明拷贝长度超过目标缓冲区容量优先检查长度参数计算是否包含字符串终止符\0源码中字符串场景统一为length 1U。对照func1定位接口func1是外层 API 名结合上文的触发场景表可迅速判断是查询类rtGetSocVersion、内核参数类rtConfigureCall、rtsKernelArgsParaUpdate还是 Profiling 类rtsProfTrace接口检查调用方缓冲区管理多数 EE1020 源于调用方提供的缓冲区过小或指针失效。对照dest_max与count调整缓冲区分配策略或修正长度参数后重试检索官方文档可参考本仓库 RTS-Errors.md 错误码目录及中文版 EE1020-Invalid_Argument.md 交叉核对保留现场日志若问题无法通过参数修正解决保留带ErrorCodeEE1020的完整日志含时间戳、上下文与扩展信息提交给 Runtime 团队分析——扩展信息中的十六进制地址与长度是定位内存问题的关键证据。七、与其他 RTS 参数类错误码的区分EE1020 属于“参数无效”大类但触发时机特殊。使用时应与同类错误码区分错误码触发时机典型场景EE1003参数取值不合法消息中带“期望值”值域越界如长度不在[0, 255]EE1004参数为空指针指针类参数为 NULLEE1017参数不合法带原因描述参数关系不满足如paraSize不相等EE1020外层校验通过后标准安全函数memcpy_s等执行失败缓冲区容量不足、内存拷贝失败EE1022多个参数取值不合法多参数同时越界一句话记忆EE1003/EE1004 是“还没开始拷就发现参数不对”EE1020 是“参数看起来没问题、但拷的时候被安全函数拒绝”。因此 EE1020 的报错信息里永远会带标准函数名与 errno这是它最鲜明的特征。八、总结EE1020 是 CANN Runtime 报告“内部标准安全函数调用失败”的统一错误码其消息中完整保留了外层 API、内层标准函数、errno、原因文本与内存现场五要素排查价值极高。通过 error_code_meta.h 的元数据定义、rt_log.h 的打印链路、api_c_soc.cc 等触发点以及 rt_error_code_test.cc 的测试覆盖开发者可以快速建立“报错 → 函数 → 缓冲区 → 长度”的定位路径。遇到该错误时优先核对dest_max与count的关系以及缓冲区归属绝大多数场景均可通过修正缓冲区容量或长度参数解决。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

单目视觉避障中的神经模糊控制:从ANFIS原理到嵌入式部署

单目视觉避障中的神经模糊控制:从ANFIS原理到嵌入式部署

简介:PDF文档聚焦基于神经网络模糊控制的单目无人机视觉避障方法,面向无人机、机器人与计算机视觉方向的研究生、工程师及刚入门的科研人员。内容系统梳理了神经网络在图像特征提取与障碍物识别中的作用,以及模糊控制在深度信息不完整条件下的…

2026/9/21 18:45:15 阅读更多 →
RS ZND/ZNC SCPI指令实战:射频自动化测试核心指南

RS ZND/ZNC SCPI指令实战:射频自动化测试核心指南

简介:本资源是罗德与施瓦茨(R&S)ZND系列矢量网络分析仪的官方用户手册,面向射频工程师、测试测量技术人员及高校微波/通信专业师生,用于系统掌握该仪器的操作方法、硬件扩展能力与高级测量功能。手册全面覆盖9 kHz…

2026/9/21 18:26:06 阅读更多 →
PicoClaw 接入 QQ:开放平台机器人配置指南与通道源码解析

PicoClaw 接入 QQ:开放平台机器人配置指南与通道源码解析

PicoClaw 接入 QQ:开放平台机器人配置指南与通道源码解析 【免费下载链接】picoclaw Tiny, Fast, and Deployable anywhere — automate the mundane, unleash your creativity 项目地址: https://gitcode.com/gh_mirrors/pi/picoclaw PicoClaw 通过 QQ 开放…

2026/9/21 16:55:11 阅读更多 →

最新新闻

高速工具钢源码解析: 3步搞定版本API变更坑

高速工具钢源码解析: 3步搞定版本API变更坑

高速工具钢源码解析: 3步搞定版本API变更坑 版本升级后 API 全变了,这是转岗工程师最崩溃的瞬间。你刚把旧版逻辑跑通,新版文档却换了天,报错堆栈像天书。别慌,我们直接拆解 高速工具钢 相关的底层逻辑,通过 源码解析 找到不变的内核。…

2026/9/22 1:01:18 阅读更多 →
华硕B460M主板RAID1组建全流程:BIOS设置、驱动加载与SN码查询

华硕B460M主板RAID1组建全流程:BIOS设置、驱动加载与SN码查询

两三天前我刚用一块华硕 TUF B460M 主板帮朋友装完一台资料备份机,两块 4TB 西部数据机械硬盘组 RAID1。整个过程从 BIOS 里的 SATA 模式切换,到 Intel RST 界面里创建阵列,再到 Windows 安装时加载 RAID 驱动,最后查询主板 SN 码…

2026/9/22 1:01:18 阅读更多 →
李素丽热线电话面试必问:5个高频考点让你稳拿offer

李素丽热线电话面试必问:5个高频考点让你稳拿offer

李素丽热线电话面试必问:5个高频考点让你稳拿offer 看了一堆教程还是不会写项目?别慌,这不仅是你的问题,也是90%初级开发者的通病。很多同学在准备面试时,死磕算法题,却忽略了像“李素丽热线电话”这种看似冷门实则高频的业务逻辑考点。…

2026/9/22 1:01:18 阅读更多 →
C#解析CAN总线ASC文件:从格式原理到高性能报文处理实战

C#解析CAN总线ASC文件:从格式原理到高性能报文处理实战

1. 为什么CAN总线数据分析离不开ASC文件搞汽车电子或者工业控制上位机的兄弟,对CAN总线肯定不陌生。车上几十个ECU挂在两条线上,刹车、油门、电机转速、电池电压,所有关键信号都在上面跑。问题来了:设备跑起来的时候你不可能一直盯…

2026/9/22 1:01:18 阅读更多 →
苹果手游电脑模拟器源码剖析保姆级教程

苹果手游电脑模拟器源码剖析保姆级教程

苹果手游电脑模拟器源码剖析保姆级教程 面试被问“苹果手游在电脑上怎么跑”,你卡壳了?别慌,今天这篇保姆级教程直接带你拆穿底层逻辑。 很多应届生以为这就是个“虚拟内存”游戏,结果面试官一追问 Hypervisor…

2026/9/22 1:01:18 阅读更多 →
iphone4山寨版拆解:新手避坑指南

iphone4山寨版拆解:新手避坑指南

iphone4山寨版拆解:新手避坑指南 刚学完语法,对着空白的 IDE 发呆?这是无数新手的噩梦。你懂 if-else ,会写循环,但一动手搭项目就抓瞎。别慌,这就是典型的 新手避坑 期。…

2026/9/22 1:00:18 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →