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. 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 code

  • You need to configure either ELIXIR_EDITOR or EDITOR env variable for open 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)