DEV Community

Sushant Bajracharya
Sushant Bajracharya

Posted on • Updated on

Debugging with IEx

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.

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 code

  • You need to configure either ELIXIR_EDITOR or EDITOR env variable for open to work


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
  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 ]


rs = fn ->
  Process.exit(self(), :normal)

Top comments (0)