What do you think about Michal's decompile package: https://github.com/michalmuskala/decompile
You can install as an archive and use it any project from the command line and it supports multiple formats. *José Valim* www.plataformatec.com.br Skype: jv.ptec Founder and Director of R&D On Mon, Aug 6, 2018 at 9:48 AM, Devon Estes <[email protected]> wrote: > As part of debugging an issue in Benchee recently, we needed to look at > BEAM instructions for some code to see what exactly was being generated on > OTP 20 and OTP 21. I also know of several other people in the community > that need to look at the BEAM instructions from time to time, either for > debugging purposes or for performance analysis purposes. Each of these > people have their own little script or function stored somewhere that > generates this code for them. I think, in the spirit of adding things to > Elixir Core that help in the development of the language itself, it would > be nice to have a function to take care of generating BEAM instructions in > Elixir Core. > > That's why I am proposing a new function called > `Code.beam_instructions/1`. It would accept a string of Elixir code and > would return a human readable binary representation of the BEAM > instructions for the given code. > > For reference, here's the implementation that I'm currently using to > inspect BEAM instructions (which I got from Tobias Peiffer): > > ``` > defmodule ASM do > def for(code) do > code = """ > defmodule Test do > def test do > #{code} > end > end > """ > > [{_, beam}] = Code.compile_string(code) > {:ok,{_,[{:abstract_code,{_,abstract_code}}]}} = > :beam_lib.chunks(beam,[:abstract_code]) > {:ok, _module, asm} = :compile.forms(abstract_code, [:to_asm]) > asm > end > end > ``` > > and here's a link to Saša Jurić's gist on which that's based: > https://gist.github.com/sasa1977/73274c2be733b5321ace > > The reason it's helpful to have in Elixir core instead of in a separate > file somewhere is that you can drop this function in as a debugging > statement in the code you're working on instead of having to pull out the > code you're working on and paste it into an IEX session somewhere else. > It's a convenience for sure, but it would help make the development > experience nicer. > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/elixir-lang-core/b3e26fb3-9034-42d7-bb25- > fd04d5686b6b%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/b3e26fb3-9034-42d7-bb25-fd04d5686b6b%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2B3K%2BstfxX-4xLFESHweM%2BNOQ_LzjNCekbWEqBM07GbWg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
