主页

索引

模块索引

搜索页面

compile模块

parse_transform

首先我们要明确erlang中Abstract Format的概念,这个我就不重复了,大家可以直接http://erlang.org/doc/apps/erts/absform.html

查看源码:

f().
Beam = "./_build/default/lib/esockd/ebin/esockd_acceptor_sup.beam".
{ok, {_, [{abstract_code, {_,Abs}}]}} =  beam_lib:chunks(
  Beam, [abstract_code]).
io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(Abs))]).

file/2

格式:

file(File, Options) -> CompRet

类型:
CompRet = ModRet | BinRet | ErrRet
ModRet = {ok,ModuleName} | {ok,ModuleName,Warnings}
BinRet = {ok,ModuleName,Binary} | {ok,ModuleName,Binary,Warnings}
ErrRet = error | {error,Errors,Warnings}

常见的Option:

debug_info:
warnings_as_errors:
{i,Dir}: -include or -include_lib指令
{d,Macro}, {d,Macro,Value}: 定义宏的值,其中Macro为原子,Value为term(),默认为true。
{parse_transform,Module}: 在代码检错前,Module:parse_transform/2需要被提前实现
  当想用Erlang原有的语法但想实现不同的功能时使用.原始的Erlang代码会被转化成你想要的语法

借助recon:

// 监听
recon_trace:calls({lager_transform,insert_record_attribute,1}, 1, [{scope, local}]).
// 运行辅助监听
c("lib/demo_lager-0.1.0/src/demo_lager_server", [{parse_transform,lager_transform}]).

主页

索引

模块索引

搜索页面