Je viens de commencer à utiliser Elixir et j'ai lancé un projet Phoenix, que j'apprécie beaucoup. Maintenant, en ayant Rails background, j'ai l'habitude d'être gâté avec des outils de débogage comme "debugger", "byebug" et ainsi de suite; je me demandais s'il existe des outils similaires pour Elixir? Comment vous déboguez vos applications Elixir?
Même un équivalent à Rubys raise my_object.inspect
, ferait des merveilles!
Merci
Vous pouvez utiliser IEx
require IEx
value = {:some, :erlang, :value}
IEx.pry
Si vous démarrez ce programme avec par exemple iex -s program.exs
(ou iex -S mix
pour un projet), il vous sera demandé si vous souhaitez autoriser le code dans ce code lorsqu'il sera atteint et value
sera disponible pour inspection.
Vous pouvez également simplement effectuer le débogage d'impression en utilisant IO.inspect
vous permettant de générer essentiellement n'importe quelle structure de données erlang.
Débogage des applications Cowboy et des applications Phoenix.
J'ai vu ce post dans le rader Elixir http://www.jessetrimble.net/iex-pry-elixir , et j'ai pensé que je le résumerais ici, car c'est extrêmement pratique :-).
Dans Rails applications (et autres), vous pouvez simplement mettre la balise de débogage dans votre contrôleur, et lorsque le chemin est déclenché, il se cassera à la balise de débogage.
Lorsque vous utilisez Pry à Phoenix, ce qui précède entraînera
Cannot pry #PID<0.259.0> at web/controllers/posts_controller.ex:8. Is an IEx Shell running?
Il s'avère que le processus Phoenix doit s'exécuter dans une session IEx, cela se fait en tant que tel
iex -S mix phoenix.server
Maintenant, à la place, vous verrez
Request to pry #PID<0.266.0> at web/controllers/posts_controller.ex:9. Allow? [Yn]
Vous pouvez utiliser Quaff.Debug
module de https://github.com/qhool/quaff
Le module de débogage fournit une interface d'aide simple pour exécuter le code Elixir dans le débogueur graphique erlang
Je l'ai testé aujourd'hui avec Elixir 1.0.4, ça marche.
Utilisez le débogueur Erlang. Exemple avec Phoenix 1.3 et Elixir 1.5.1, fichier source: ./lib/todo/api/api.ex et le nom du module est: 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}
Dans le débogueur Erlang:
Dans Elixir 1.5 et OTP 20, il y a une nouvelle fonction Exception.blame/3
qui peut ajouter des informations de débogage à certaines exceptions. Il ne prend en charge que FunctionClauseErrors
pour le moment et vous ne devez l'utiliser qu'en développement car c'est une tâche coûteuse: la fonction récupérera les clauses disponibles du bytecode et les évaluera par rapport aux arguments donnés. Voir communiqué
Il existe un moyen de déboguer des tests similaires à ceux de byebug: à l'aide de la commande iex -S mix test
, cela exécutera vos tests et si un IEx.pry
a été rencontré, il vous demandera si vous voulez "vous arrêter" et analyser son contexte.
Exemple de code:
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
Fonctionnement iex -S mix test
il s'arrêtera dans le require IEx; IEx.pry
.
Source: https://elixirforum.com/t/how-to-debug-exunit-tests-with-debugger/14170/4