Erlang rr()返回missing_chunk

时间:2011-06-30 22:19:08

标签: erlang

关于使用翅膀3d外壳的erlang的新手问题(Windows 7专业版,机翼3d 1.4.1)。当我写命令来读取记录定义:

    rr(wings).

我总是收到错误:

    {error,beam_lib,
      {missing_chunk,'d:/temp/erlang/lib/wings/ebin/wings.beam',"Abst"}}

我做错了什么?

3 个答案:

答案 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()传递给包含定义的文件。