If you ever worked on a Phoenix app, you might have seen this debug page when an error is raised:
Generating those debug pages when an error happens is a feature turned on by setting
config :my_app, MyAppWeb.Endpoint, debug_errors: true, which can be found in
config/dev.exs of a freshly-created Phoenix app. It actually comes from
Plug.Debugger, not Phoenix itself (source).
1 2 3 4 # phoenixframework/phoenix - lib/phoenix/endpoint.ex#L419-L421 if var!(config)[:debug_errors] do use Plug.Debugger, otp_app: @otp_app,
Plug.Debugger offers an option to generate links in the stack trace directly to your editor (source).
1 2 3 4 5 6 7 8 9 10 11 12 13 # elixir-plug/plug - lib/plug/debugger.ex#L80-L89 """ If a `PLUG_EDITOR` environment variable is set, `Plug.Debugger` will use it to generate links to your text editor. The variable should be set with `__FILE__` and `__LINE__` placeholders which will be correctly replaced. For example (with the [TextMate](http://macromates.com) editor): txmt://open/?url=file://__FILE__&line=__LINE__ Or, using Visual Studio Code: vscode://file/__FILE__:__LINE__ """
You will need to find out if your editor supports a custom URL scheme that will open files in it. In
Plug.Debugger’s code, there are examples for TextMate (
txmt://open/?url=file://__FILE__&line=__LINE__) and Visual Studio Code (
I personally use RubyMine, which supports the scheme
x-mine, which means I can build URLs like this:
You can always try out if the custom scheme works for you by trying to open in your browser a link to a file that exists on your machine, e.g.
Once you figure out your editor’s custom URL scheme and how to pass the file name and line number in that URL, you need to set the environment variable
PLUG_EDITOR to that URL. Make sure to use
__FILE__ as the file name placeholder and
__LINE__ as the line number placeholder.
How to achieve that depends on your operating system and shell. On macOS, using bash as my shell, I needed to add this line to my
1 2 # ~/.bash_profile export PLUG_EDITOR='x-mine://open?file=__FILE__&line=__LINE__'
Before restarting your Phoenix server to see the results, do not forget to reload the file (
. ~/.bash_profile) in an existing shell session or just open a new session.
Is that OK with you?