Elixirを使い始めたばかりで、Phoenixプロジェクトを始めました。今、Rails backgroundを持っていることで、「debugger」、「byebug」などのデバッグツールに甘やかされています; Elixirに同様のツールがあるかどうか疑問に思いましたか? Elixirアプリケーションをデバッグしていますか?
Rubyに相当するものraise my_object.inspect
、不思議に思うだろう!
ありがとうございました
IEx
を使用できます
require IEx
value = {:some, :erlang, :value}
IEx.pry
たとえばiex -s program.exs
(またはプロジェクトの場合はiex -S mix
)でこのプログラムを開始すると、このコードに到達したときにこじ開けることを許可するかどうかを尋ねられ、value
は検査のために利用できます。
また、IO.inspect
を使用してデバッグを印刷するだけで、基本的にあらゆるアーランデータ構造を出力できます。
カウボーイアプリとフェニックスアプリのデバッグ
私はこの投稿をElixir raderで見ました http://www.jessetrimble.net/iex-pry-elixir 。非常に便利なので、ここで要約するだけだと思いました:-)。
Rails applications(およびその他))では、コントローラーのデバッガータグに単純に入れることができ、パスがトリガーされると、デバッガータグで中断します。
フェニックスでこじ開けを使用すると、上記の結果になります
Cannot pry #PID<0.259.0> at web/controllers/posts_controller.ex:8. Is an IEx Shell running?
PhoenixプロセスはIExセッション内で実行する必要があり、これはそのように行われます
iex -S mix phoenix.server
今では代わりに表示されます
Request to pry #PID<0.266.0> at web/controllers/posts_controller.ex:9. Allow? [Yn]
https://github.com/qhool/quaff からQuaff.Debug
モジュールを使用できます
Debugモジュールは、erlangグラフィカルデバッガーでElixirコードを実行するためのシンプルなヘルパーインターフェイスを提供します
今日、Elixir 1.0.4でテストしましたが、動作します。
Erlangデバッガーを使用します。 Phoenix 1.3およびElixir 1.5.1の例、ソースファイル:./lib/todo/api/api.ex、モジュール名:Todo.API
~/elixir/todo_app/ iex -S mix phx.server
Erlang/OTP 20 [erts-9.0] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
[info] Running TodoWeb.Endpoint with Cowboy using http://0.0.0.0:4000
Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :debugger.start()
{:ok, #PID<0.373.0>}
iex(2)> :int.ni(Todo.API)
{:module, Todo.API}
Erlangデバッガーで:
Elixir 1.5およびOTP 20には、新しい関数Exception.blame/3
特定の例外にデバッグ情報を追加できます。現在はFunctionClauseErrors
のみをサポートしており、高価なタスクであるため、開発でのみ使用する必要があります。関数は使用可能な句をバイトコードから取得し、指定された引数に対して評価します。 リリースを参照
Byebugと同様のテストをデバッグする方法があります。コマンドiex -S mix test
を使用すると、テストが実行され、IEx.pry
が検出された場合、そこで「停止」して分析するかどうかが尋ねられます。コンテキスト。
コード例:
defmodule AppTest do
def hello do
test_variable = "john doe"
require IEx; IEx.pry
:world
end
end
defmodule AppTestTest do
use ExUnit.Case
doctest AppTest
test "greets the world" do
assert AppTest.hello() == :world
end
end
iex -S mix test
を実行すると、require IEx; IEx.pry
で停止します。
ソース: https://elixirforum.com/t/how-to-debug-exunit-tests-with-debugger/14170/4