Suche…


Debuggen mit IEX.pry / 0

Das Debuggen mit IEx.pry/0 ist recht einfach.

  1. require IEx in Ihrem Modul
  2. Suchen Sie die Codezeile, die Sie untersuchen möchten
  3. Fügen IEx.pry nach der Zeile IEx.pry hinzu

Starten Sie nun Ihr Projekt (zB iex -S mix ).

Wenn die Zeile mit IEx.pry/0 erreicht ist, wird das Programm IEx.pry/0 und Sie haben die Möglichkeit zu prüfen. Es ist wie ein Haltepunkt in einem traditionellen Debugger.

Wenn Sie fertig sind, tippen Sie einfach respawn in die Konsole.

require IEx;

defmodule Example do
  def double_sum(x, y) do
    IEx.pry
    hard_work(x, y)
  end

  defp hard_work(x, y) do
    2 * (x + y)
  end
end

Debuggen mit IO.inspect / 1

Es ist möglich, IO.inspect / 1 als Werkzeug zum Debuggen eines Elixierprogramms zu verwenden.

defmodule MyModule do
  def myfunction(argument_1, argument_2) do
    IO.inspect(argument_1)
    IO.inspect(argument_2)
  end
end

Es werden Argumente_1 und Argumente_2 an die Konsole ausgegeben. Da IO.inspect/1 sein Argument zurückgibt, ist es sehr einfach, es in Funktionsaufrufe oder Pipelines aufzunehmen, ohne den Fluss zu IO.inspect/1 :

do_something(a, b)
|> do_something_else(c)

# can be adorned with IO.inspect, with no change in functionality:

do_something(IO.inspect(a), IO.inspect(b))
|> IO.inspect
do_something(IO.inspect(c))

In Rohrleitung debuggen

defmodule Demo do
  def foo do
    1..10
    |> Enum.map(&(&1 * &1))          |> p
    |> Enum.filter(&rem(&1, 2) == 0) |> p
    |> Enum.take(3)                  |> p
  end

  defp p(e) do
    require Logger
    Logger.debug inspect e, limit: :infinity
    e
  end
end

iex(1)> Demo.foo

23:23:55.171 [debug] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

23:23:55.171 [debug] [4, 16, 36, 64, 100]

23:23:55.171 [debug] [4, 16, 36]

[4, 16, 36]

In Pfeife hebeln

defmodule Demo do
  def foo do
    1..10
    |> Enum.map(&(&1 * &1))
    |> Enum.filter(&rem(&1, 2) == 0) |> pry
    |> Enum.take(3)
  end

  defp pry(e) do
    require IEx
    IEx.pry
    e
  end
end

iex(1)> Demo.foo
Request to pry #PID<0.117.0> at lib/demo.ex:11

      def pry(e) do
        require IEx
        IEx.pry
        e
      end

Allow? [Yn] Y

Interactive Elixir (1.3.2) - press Ctrl+C to exit (type h() ENTER for help)
pry(1)> e
[4, 16, 36, 64, 100]
pry(2)> respawn

Interactive Elixir (1.3.2) - press Ctrl+C to exit (type h() ENTER for help)
[4, 16, 36]
iex(1)>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow