DEV Community

Mạnh Vũ
Mạnh Vũ

Posted on • Edited on

Elixir Tricks & Tips for debugging

Intro

I will continue add tips & tricks for develop/debugging with Elixir in this topic for sharing my experiences about Elixir.

Add .iex.exs file for easy develop & debug

Add .iex.exs file to root folder of Elixir app then:

1. Add alias to avoid type much

example add

alias MyApp.Background.Worker, as: W

defmodule FillData do
  def add_sample() do
    Cache.add_room(:hello, "Hello room", nil)
    Cache.add_room_members(:hello, ["user_1", "user_2", "user_3"], nil)
  end
end
Enter fullscreen mode Exit fullscreen mode

to your .iex.exs and run with iex -S mix or iex -S mix phx.server then in Elixir shell you can type like:

W.run()

# For add sample data for developing
FillData.add_sample()  # Or add directly to .iex.exs
Enter fullscreen mode Exit fullscreen mode

2. Add function/script support for debugging.
You can add a script or function needed for debugging then run in Elixir shell.

rescue in body function

when define a function you can directly use rescue in body without try keyword.

Example:

  def server_info(endpoint, scheme) do
    address =
      endpoint
      |> make_ref(scheme)
      |> :ranch.get_addr()

    {:ok, address}
  rescue
    e -> {:error, Exception.message(e)}
  end
Enter fullscreen mode Exit fullscreen mode

(code from :swarm library)

Add support :observer

:observer is interesting tool for view system statistics, app structure like supervisor, process, ets table,...

We can add to dev mode to mix.exs file like:

defmodule MyApp.MixProject do
  # ...

  def application do
    dev_app =
      case Mix.env() do
        :dev -> [:observer, :wx]
        _ -> []
      end

    required_app = [:logger, :runtime_tools]

    [
      mod: {EmbeddedChat.Application, []},
      extra_applications: required_app ++ dev_app
    ]
  end
end
Enter fullscreen mode Exit fullscreen mode

Now, when you start dev mode you can start :observer by simple command :observer.start()

Note: :observer need graphic library to show system data then we need to start it on a OS support that (Windows/macOS/Linux with graphic). For case need view system that doesn't have graphic library like container in Kubernetes cluster, we can join to remote node from other machine and start :observer.

Top comments (0)