web-dev-qa-db-ja.com

Elixirのデバッグツールとデバッグツール

Elixirを使い始めたばかりで、Phoenixプロジェクトを始めました。今、Rails backgroundを持っていることで、「debugger」、「byebug」などのデバッグツールに甘やかされています; Elixirに同様のツールがあるかどうか疑問に思いましたか? Elixirアプリケーションをデバッグしていますか?

Rubyに相当するものraise my_object.inspect、不思議に思うだろう!

ありがとうございました

63
MartinElvar

IExを使用できます

require IEx

value = {:some, :erlang, :value}
IEx.pry

たとえばiex -s program.exs(またはプロジェクトの場合はiex -S mix)でこのプログラムを開始すると、このコードに到達したときにこじ開けることを許可するかどうかを尋ねられ、valueは検査のために利用できます。

また、IO.inspectを使用してデバッグを印刷するだけで、基本的にあらゆるアーランデータ構造を出力できます。

72
Paweł Obrok

カウボーイアプリとフェニックスアプリのデバッグ

私はこの投稿を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]
32
MartinElvar

https://github.com/qhool/quaff からQuaff.Debugモジュールを使用できます

Debugモジュールは、erlangグラフィカルデバッガーでElixirコードを実行するためのシンプルなヘルパーインターフェイスを提供します

今日、Elixir 1.0.4でテストしましたが、動作します。

10
Julien Lirochon

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デバッガーで:

  • モニターウィンドウの左パネルには、ロードされたモジュールが表示されます。
  • モジュールメニューの一番下の項目には、ロードされたモジュールが「表示」および「削除」サブメニューとともに表示されます。 [表示]メニューを使用して、ソースを行番号とともに表示します。
  • ブレークポイントを配置するには、[ブレーク]メニューの[改行...]を使用します.
  • 指定した行で停止するまでプログラムを実行します。モニターウィンドウには、ステータスが「ブレーク」のプロセスが表示されます。この行をダブルクリックして、デバッガーでアタッチされたプロセスを開きます。ここで、ステップ、ステップオーバー(次)、続行、上へ移動、値の検査などを行うことができます。別のモジュールにステップインするには、上記のようにロードする必要があります。
  • ブレークポイントは、正しく配置されていないと無視されます。複数行のパイプラインがある場合、ブレークポイントを最後の行に配置します。
2
N. Hoogervorst

Elixir 1.5およびOTP 20には、新しい関数Exception.blame/3特定の例外にデバッグ情報を追加できます。現在はFunctionClauseErrorsのみをサポートしており、高価なタスクであるため、開発でのみ使用する必要があります。関数は使用可能な句をバイトコードから取得し、指定された引数に対して評価します。 リリースを参照

1
Cyzanfar

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

0
Mateus Luiz