I always find it a bit cumbersome to type
require IEx; IEx.pry() whenever I need to debug something. Especially because of the lower and uppercase letters it is harder to type than for example
byebug in Ruby.
So I figured I would create a helper function, like
defmodule MyApp do def pry() do require IEx IEx.pry() end end
But obviously that won’t work since it will run IE.pry() inside the helper function instead of in the caller context.
So then I created this macro:
defmodule MyApp do defmacro pry() do quote do require IEx IEx.pry() end end end
Unfortunately, now we’re back to square one though, since I’d still need to
require MyApp; MyApp.pry().
So I finally settled on the following solution:
defmodule MyApp.Debugger do defmacro __using__(_opts \\ ) do quote do require IEx IEx.pry() end end end
Which allows me to set a breakpoint anywhere using
use MyApp.Debugger. Could even rename it to just
What do you think of this approach?