Outils de débogage et de débogage dans Elixir?

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:

  • Le panneau de gauche de la fenêtre Moniteur affiche le module chargé.
  • Le menu Module, l’élément du bas montre le module chargé avec un sous-menu “Affichage” et “Supprimer”. Utilisez le menu Affichage pour voir la source avec les numéros de ligne.
  • Pour placer un point d’arrêt, utilisez le menu Casser, les sauts de ligne …
  • Exécutez votre programme jusqu’à ce qu’il s’arrête à la ligne spécifiée. La fenêtre Moniteur affiche un processus avec le statut ‘pause’. Double-cliquez sur cette ligne pour ouvrir le processus joint dans le débogueur. Ici, vous pouvez avancer, passer à la suite, continuer, monter, inspecter les valeurs, etc. Pour entrer dans un autre module, il faut également le charger comme ci-dessus.
  • Un point d’arrêt sera ignoré s’il n’est pas correctement placé. Si vous avez un pipeline multiligne, placez le point d’arrêt sur la dernière ligne.

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é