如何解读IntelliJ中运行Erlang函数时的运行时错误信息
Erlang函数运行错误解读
执行命令
"C:\Program Files\Erlang OTP\bin\erl.exe" -pa F:/1TB/P/workspace-IntelliJ-Erlang2/netconfClient/out/production/netconfClient -pa F:/1TB/P/workspace-IntelliJ-Erlang2/netconfClient -eval netconfManager:open2(). -s init stop -noshell
错误核心分析
错误根因为**badarg(无效参数)**,触发点是ets:select(ct_attributes, ...)调用——ct_attributes这个ETS表不存在,导致ETS操作因参数无效失败。
调用栈拆解
从报错栈可以追踪执行流程:
- 执行的
netconfManager:open2()调用了ct_netconfc:open/4 - 接着进入
ct_gen_conn:do_start/4 - 随后调用
ct_util:does_connection_exist/3 - 再到
ct_config:get_key_from_name/1 - 最终在
ets:select/2抛出错误
问题本质
ct_*开头的模块是Erlang Common Test(CT)测试框架的组件,这类模块依赖CT框架初始化的运行环境,包括创建ct_attributes这类ETS表。直接通过IntelliJ的Run Configuration运行函数,没有启动CT框架的初始化流程,导致依赖资源缺失,进而触发参数错误。
解决方向
- 通过Common Test框架运行:把代码包装成CT测试用例,用CT的启动方式运行,确保环境初始化完成
- 修改代码逻辑:如果不需要CT框架,替换掉依赖
ct_netconfc等CT模块的代码,改用不依赖CT的NetConf客户端实现 - 手动初始化CT环境(不推荐):若必须直接运行,需手动调用CT的初始化函数,但这种方式易引入其他环境问题,不建议使用
内容的提问来源于stack exchange,提问作者Bhuvan
相关产品推荐
相关产品推荐

