Erlang rr () возвращает отсутствующий_чанк - PullRequest
0 голосов
/ 01 июля 2011

Вопрос новичка об использовании Erlang от Wings 3D Shell (Windows 7 Pro, Wings 3D 1.4.1). Когда я пишу команду для чтения записей определений:

    rr(wings).

Я всегда получаю сообщение об ошибке:

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

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

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 голос
/ 01 июля 2011

Я использую:

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}}
0 голосов
/ 01 июля 2011

rr / 1 требует фактического имени файла или относительного пути к имени файла.Например:

rr("wings.hrl").

OR

rr("./apps/MYAPP-1.0/include/my_include_file.hrl").

OR

rr("./src/wings.erl").

Другими словами, передайте ему фактический относительный PATH из вашего pwd() в файл, содержащий определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...