There are already too many articles about Debugging with IEx on the web, so I will just get to the point straight.
FYI: As per Jose, Pry is not a debugger. It just allows you to interact with a particular context. https://stackoverflow.com/questions/33203676/iex-pry-going-step-by-step
If you want to
add a breakpoint in your code: require IEx; IEx.pry()
continue to the next breakpoint: continue()
continue the execution of code without hitting any other breakpoints: respawn()
add a breakpoint to a function: IEx.break!(Module, :function, arity) eg IEx.break!(String, :length, 1)
know your breakpoints current location: whereami
open the code in the editor: open()
list out all the methods of a module: exports(ModuleName)
Keep In Mind, that
helper functions like
continue
,respawn
,whereami
are only available inside pry session.whereami
,open
won't work with precompiled source codeYou need to configure either
ELIXIR_EDITOR
orEDITOR
env variable foropen
to work
Productivity
It would make your life easier if you would configure a couple of things.
- Enabling History
If you want to have access to the commands you typed in your previous iex session, then add this export ERL_AFLAGS="-kernel shell_history enabled"
to your .bashrc
file and source .bashrc
. You won't get your shell history if you had terminated the previous IEx session by pressing Ctrl + c
two times. The right way to exit IEx session is to ctrl g + q
- Customizing your IEx
You can customize your IEx by creating .iex.exs
file. This file gets executed every time you run IEx.
My .iex.exs
file:
IO.puts """ ` ;: `+; ++', .+++, :'++'. .+'++'; Welcome to elixir-land ,+'+''': `:+'+';';; http://elixir-lang.org ,:++';;;;'. http://www.phoenixframework.org/ ::'+';;;;'' https://hex.pm/ :;;++;;';'' http://www.elixirschool.com/ .;;'''';;;: https://github.com/christopheradams/elixir_style_guide ,:::'';,,. ,,,,,:::, ,,,,,,, ``.` """ IEx.configure( alive_prompt: "%prefix(%node):%counter>", default_prompt: "%prefix:%counter>", inspect: [pretty: true, char_lists: :as_lists, limit: :infinity], history_size: -1, colors: [ ls_directory: :cyan, ls_device: :yellow, doc_code: :green, doc_inline_code: :magenta, doc_headings: [:cyan, :underline], doc_title: [:cyan, :bright, :underline], eval_result: [ :cyan, :bright ] ] ) import_file_if_available(".secret.exs") rs = fn -> Process.exit(self(), :normal) end
Top comments (0)