Recherche…


Déboguer avec IEX.pry / 0

IEx.pry/0 avec IEx.pry/0 est assez simple.

  1. require IEx dans votre module
  2. Trouvez la ligne de code que vous voulez inspecter
  3. Ajouter IEx.pry après la ligne

Maintenant, lancez votre projet (par exemple, le iex -S mix ).

Lorsque la ligne avec IEx.pry/0 est atteinte, le programme s'arrête et vous avez la possibilité d'inspecter. C'est comme un point d'arrêt dans un débogueur traditionnel.

Lorsque vous avez terminé, tapez simplement respawn dans la console.

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

Déboguer avec IO.inspect / 1

Il est possible d'utiliser IO.inspect / 1 comme outil pour déboguer un programme d'élixir.

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

Il imprimera argument_1 et argument_2 sur la console. Comme IO.inspect/1 renvoie son argument, il est très facile de l’inclure dans les appels de fonctions ou les pipelines sans casser le flux:

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

Debug dans pipe

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]

Pry en pipe

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow