Buscar..


Depuración con IEX.pry / 0

La depuración con IEx.pry/0 es bastante simple.

  1. require IEx en su módulo
  2. Encuentra la línea de código que quieres inspeccionar
  3. Añadir IEx.pry después de la línea

Ahora inicie su proyecto (por ejemplo, iex -S mix ).

Cuando se IEx.pry/0 la línea con IEx.pry/0 el programa se detendrá y usted tendrá la oportunidad de inspeccionar. Es como un punto de quiebre en un depurador tradicional.

Cuando hayas terminado solo escribe respawn en la consola.

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

Depuración con IO.inspect / 1

Es posible usar IO.inspect / 1 como una herramienta para depurar un programa de elixir.

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

Imprimirá argumento_1 y argumento_2 en la consola. Dado que IO.inspect/1 devuelve su argumento, es muy fácil incluirlo en llamadas a funciones o tuberías sin interrumpir el flujo:

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))

Depuración en la tubería

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]

Hacer palanca en el tubo

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow