关于使用翅膀3d外壳的erlang的新手问题(Windows 7专业版,机翼3d 1.4.1)。当我写命令来读取记录定义:
rr(wings).
我总是收到错误:
{error,beam_lib,
{missing_chunk,'d:/temp/erlang/lib/wings/ebin/wings.beam',"Abst"}}
我做错了什么?
答案 0 :(得分:2)
rr / 1“从模块的BEAM文件中读取记录定义。如果BEAM文件中没有记录定义,则定位并读取源文件。”
我的猜测是抽象表单没有包含在.BEAM文件中,而且在安装中源文件不可用。
更新:深入了解shell:read_file_records/2
功能,我发现了以下内容:
read_file_records(File, Opts) ->
case filename:extension(File) of
".beam" ->
case beam_lib:chunks(File, [abstract_code,"CInf"]) of
{ok,{_Mod,[{abstract_code,{Version,Forms}},{"CInf",CB}]}} ->
case record_attrs(Forms) of
[] when Version =:= raw_abstract_v1 ->
[];
[] ->
%% If the version is raw_X, then this test
%% is unnecessary.
try_source(File, CB);
Records ->
Records
end;
{ok,{_Mod,[{abstract_code,no_abstract_code},{"CInf",CB}]}} ->
try_source(File, CB);
Error ->
%% Could be that the "Abst" chunk is missing (pre R6).
Error
end;
_ ->
parse_file(File, Opts)
end.
看起来,如果“Abst”块丢失,它甚至不会尝试读取源代码。 beam_lib:chunks(File, [abstract_code,"CInf"])
为您返回什么?您正在运行哪个Erlang版本?
答案 1 :(得分:1)
我正在使用:
Erlang R14B01 (erts-5.8.2) [rq:1] [async-threads:0]
Eshell V5.8.2 (abort with ^G)
调用此方法可以正常工作:
rr("d:/temp/erlang/src/wings.hrl").
通话:
beam_lib:chunks("wings", [abstract_code,"CInf"]).
返回:
{error,beam_lib,{file_error,"wings.beam",enoent}}
答案 2 :(得分:0)
rr / 1需要实际文件名或文件名的相对PATH。像这样:
rr("wings.hrl"). OR rr("./apps/MYAPP-1.0/include/my_include_file.hrl"). OR rr("./src/wings.erl").
换句话说,将实际的相对路径从pwd()
传递给包含定义的文件。