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)