使用IntelliJ调试带EUnit的Erlang代码时测试套件取消原因排查
Erlang EUnit调试时「Test suite was cancelled」错误的原因分析
环境与问题描述
使用IntelliJ IDEA 2022.2.2调试包含EUnit测试用例的Erlang代码,设置断点后点击「Run → Debug」,出现「Test suite was cancelled」错误,执行命令及报错信息如下:
"C:\Program Files\Erlang OTP\bin\erl.exe" -pa C:\Users\bhu\AppData\Local\Temp\intellij_erlang_debugger_7789 -pa C:/Users/bhu/AppData/Local/Temp/eunit_teamcity9 -pa F:/1TB/P/workspace-IntelliJ-Erlang1/out/test/workspace-IntelliJ-Erlang1 -pa F:/1TB/P/workspace-IntelliJ-Erlang1 -run debugnode main 50067 -noshell -s init stop Testing started at 20:59 ... ** Invalid beam file or no abstract code: "F:\\1TB\\P\\workspace-IntelliJ-Erlang1\\src\\my_sort.erl" Test suite was cancelled. Reason: {abort,{module_not_found,my_sort}}
可能的原因
- 模块未正确编译或BEAM文件缺失:报错中的「Invalid beam file or no abstract code」说明
my_sort.erl对应的BEAM字节码文件不存在、损坏或未生成。可能是编译过程中触发语法错误,或是IDE自动编译功能未生效,导致没有生成可执行的BEAM文件。 - 代码路径配置遗漏:启动命令通过
-pa添加了多个路径,但my_sort模块的BEAM文件可能生成在未被添加的路径中(比如IntelliJ Erlang插件默认将生产代码编译到out/production目录,而命令里只添加了out/test和项目根目录),导致Erlang虚拟机找不到该模块。 - 模块名与文件名不匹配:Erlang严格要求模块名和文件名完全一致(包括大小写),如果
my_sort.erl文件内的模块声明是-module(MySort).或其他名称,会直接触发「module_not_found」错误。 - 编译时未包含调试信息:Erlang调试需要模块携带抽象代码,编译时必须添加
+debug_info参数。虽然IntelliJ调试时应自动添加该参数,但如果插件配置错误或编译流程被修改,生成的BEAM文件会缺失调试所需的抽象代码,进而引发此报错。
内容的提问来源于stack exchange,提问作者Bhuvan
相关产品推荐
相关产品推荐

