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のコミュニティも、デフォルトのデバッグツールを超えてvisualixir
やrexbug
のようなツールを提供し、デバッグツールのエコシステムを拡大しています。
参照
- 公式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