Je viens de commencer à utiliser Elixir et j’ai lancé un projet Phoenix, que j’apprécie beaucoup. Maintenant, en ayant des rails d’arrière-plan, j’ai l’habitude d’être gâté avec des outils de débogage tels que “débogueur”, “byebug”, etc. Je me demandais s’il existe des outils similaires pour Elixir? Comment déboguez-vous vos applications Elixir?
Même un équivalent à Rubys raise my_object.inspect
, ferait des merveilles!
Je vous remercie
Vous pouvez utiliser IEx
require IEx value = {:some, :erlang, :value} IEx.pry
Si vous lancez 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 détournement de ce code lorsqu’il est atteint et que la value
sera disponible pour vous. inspection.
Vous pouvez également simplement effectuer un débogage d’impression à l’aide de IO.inspect
ce qui vous permet de générer essentiellement toute structure de données erlang.
Débogage des applications Cowboy et des applications Phoenix.
J’ai vu ce post dans Elixir rader http://www.jessesortingmble.net/iex-pry-elixir , et j’ai pensé que je résumerais tout ça ici, car c’est extrêmement pratique :-).
Dans les applications Rails (et autres), vous pouvez simplement insérer la balise du débogueur dans votre contrôleur et, lorsque le chemin est déclenché, il se cassera à la balise du débogueur.
Lorsque vous utilisez pry dans 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 le module Quaff.Debug
sur https://github.com/qhool/quaff
Le module de débogage fournit une interface d’assistance 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 nom du module: 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 append des informations de débogage à certaines exceptions. Il ne supporte que FunctionClauseErrors
ce moment et vous ne devriez l’utiliser qu’en développement car c’est une tâche coûteuse: la fonction récupèrera les clauses disponibles à partir de bytecode et les évaluera en fonction des arguments donnés. Voir le communiqué