Elixir Tricks & Tips for debugging

manhvanvu

M岷h V农

Posted on June 20, 2024

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.

馃挅 馃挭 馃檯 馃毄
manhvanvu
M岷h V农

Posted on June 20, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Killer Elixir Tips Github
elixir Killer Elixir Tips Github

July 30, 2018