Если у меня есть файл луча, скомпилированный из кода Эрланга с debug_info
, распечатать соответствующий исходный код довольно просто:
{ok, {_, [{debug_info, {debug_info_v1, erl_abstract_code, AbstractCode}}]}} =
beam_lib:chunks("my_module.beam", [debug_info]).
{ok, Forms} = erl_abstract_code:debug_info(erlang_v1, module_name, AbstractCode, []).
io:format("~s~n", [erl_prettypr:format(erl_syntax:form_list(Forms))]).
Но как насчет Elixir?Я могу сделать первые два шага, как это:
{ok, {_, [{debug_info, {debug_info_v1, elixir_erl, AbstractCode}}]}} =
beam_lib:chunks("Elixir.MyModule.beam", [debug_info]).
{ok, Forms} = elixir_erl:debug_info(elixir_v1, module_name, AbstractCode).
Это дает карту этой формы:
#{attributes => ...,
compile_opts => [],
definitions => ...,
deprecated => [],
file => <<"my_module.ex">>,
line => 95,
module => 'Elixir.MyModule',
unreachable => []}
Как мне распечатать это как читаемый человеком код Elixir?