Elixir:
デバッガーの使い方

方法:

Elixirには:debuggerというビルトインのグラフィカルデバッガが付属しています。これを使用するには、それを起動して実行中のプロセスにアタッチする必要があります。

まず、iexセッション内で:debuggerが起動していることを確認してください:

iex> :debugger.start()
{:ok, #PID<0.108.0>}

次に、デバッグしたいコードモジュールを解釈します:

iex> :int.ni(MyApp.MyModule)
{:module, MyApp.MyModule}

ブレークポイントを設定できます:

iex> :int.break(MyApp.MyModule, line_number)
:ok

そして、関数を実行してブレークポイントをヒットし、コードをステップ実行します:

iex> MyApp.MyModule.my_function(arg1, arg2)
# デバッガはブレークポイントのある行で実行を一時停止します

深掘り

Elixirの:debuggerの前に、Elixirが使用しているデバッガを提供したのはErlangです。これは頑丈であり、Erlang VM (BEAM)の強みである並行プロセスを扱うのに適しています。他の一部のデバッガとは異なり、:debuggerはElixirのデータが不変であるため、flyで変数を変更することはできません。代替手段として、コードの任意のポイントで実行を一時停止してREPLにジャンプすることができるIEx.pryがあり、これは非常に便利です。

:debuggerはグラフィカルインターフェースに適していますが、コードをステップ実行することを特に目的としていないものの、プロセス検査とシステムメトリックスを提供するビルトインの:observerツールを好む人もいるでしょう。Elixirのコミュニティも、デフォルトのデバッグツールを超えてvisualixirrexbugのようなツールを提供し、デバッグツールのエコシステムを拡大しています。

参照

  • 公式Elixirデバッグに関する入門ガイド:https://elixir-lang.org/getting-started/debugging.html
  • Erlangの:debuggerドキュメント:http://erlang.org/doc/apps/debugger/debugger_chapter.html
  • デバッグ技術に関するElixir Forumの議論:https://elixirforum.com/c/elixir-questions/elixir-questions-questions-help/15