DEV Community

Mạnh Vũ
Mạnh Vũ

Posted on • Edited on

Elixir Tricks & Tips for debugging & developing

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.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay