Поиск…


Отладка с помощью IEX.pry / 0

Отладка с помощью IEx.pry/0 довольно проста.

  1. require IEx в вашем модуле
  2. Найдите строку кода, которую вы хотите проверить
  3. Добавьте IEx.pry после строки

Теперь запустите свой проект (например, iex -S mix ).

Когда линия с IEx.pry/0 будет достигнута, программа остановится, и вы сможете проверить ее. Это похоже на точку останова в традиционном отладчике.

Когда вы закончите, просто введите respawn в консоль.

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

Отладка с помощью IO.inspect / 1

В качестве инструмента для отладки программы эликсиров можно использовать IO.inspect / 1.

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

Он распечатает аргументы_1 и argument_2 на консоли. Поскольку 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))

Отладка в трубе

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]

Приколите трубку

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow