5

lager.elr ( https://github.com/basho/lagerのメイン モジュール) には「debug」という名前の関数はありませんが、次のようなラガー モジュールからデバッグ関数を呼び出すアプリケーションがあります: lager:debug(Str,引数)

私はErlangの初心者ですが、モジュール「mymodule:myfunction」から関数を呼び出すと、ファイルmymodule.erlに「myfunction」という名前の関数があるはずですが、この場合、lager.erlで関数を検索すると「デバッグ」が見つかりません。

4

3 に答える 3

6

言及が表示されない理由lager:debug/2は、ラガーがparse transformを使用するためです。したがって、コードをコンパイルするとき、それはラガー解析変換を介して供給され、へlager:debug/2の呼び出しは別のモジュール関数への別の呼び出しに置き換えられます。

ラガーの正しい解析変換オプションを使用してコードをコンパイルすると、コードは機能します。

于 2012-10-13T09:22:08.307 に答える
1

「I GIVE CRAP ANSWERS」は、この奇妙な振る舞いをうまく説明しています。ここに、beam ファイルで生成されたコードを示すコードを投稿します。

シェル内:

utility:decompile([yourfile.beam])。

%% Author: PCHAPIER
%% Created: 25 mai 2010
-module(utility).

%%
%% Include files
%%

%%
%% Exported Functions
%%
-export([decompile/1, decompdir/1]).

-export([shuffle/1]).


%%
%% API Functions
%%

decompdir(Dir) ->
    Cmd = "cd " ++ Dir,
    os:cmd(Cmd),
    L = os:cmd("dir /B *.beam"),
    L1 = re:split(L,"[\t\r\n+]",[{return,list}]),
    io:format("decompdir: ~p~n",[L1]),
    decompile(L1).


decompile(Beam = [H|_]) when is_integer(H) ->
    io:format("decompile: ~p~n",[Beam]),
    {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam ++ ".beam",[abstract_code]),
    {ok,File} = file:open(Beam ++ ".erl",[write]),
    io:fwrite(File,"~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]),
    file:close(File);

decompile([H|T]) ->
    io:format("decompile: ~p~n",[[H|T]]),
    decompile(removebeam(H)),
    decompile(T);

decompile([]) ->
    ok.

shuffle(P) ->
    Max = length(P)*10000,
    {_,R}= lists:unzip(lists:keysort(1,[{random:uniform(Max),X} || X <- P])),
    R.



%%
%% Local Functions
%%
removebeam(L) ->
    removebeam1(lists:reverse(L)).

removebeam1([$m,$a,$e,$b,$.|T]) ->
    lists:reverse(T);
removebeam1(L) ->
    lists:reverse(L).
于 2012-10-15T07:19:05.923 に答える
0

これは、lager.erl の先頭に含まれる lager.hrl ファイルにあるため、lager.erl ファイルには表示されません。Erlang では、-include("filename.hrl") ディレクティブを使用してファイルをインクルードできます。慣例として、インクルード ファイルは hrl 拡張子で終わりますが、実際には何でもかまいません。

https://github.com/basho/lager/blob/master/include/lager.hrl

于 2012-10-13T03:31:20.420 に答える