Skip to content

Instantly share code, notes, and snippets.

@Tomboyo
Last active June 24, 2024 18:28
Show Gist options
  • Save Tomboyo/ef8db1ed6beb2a88a8d5fb1d7ff3d76b to your computer and use it in GitHub Desktop.
Save Tomboyo/ef8db1ed6beb2a88a8d5fb1d7ff3d76b to your computer and use it in GitHub Desktop.
Interactive Elixir Debugging with VSCode and ElixirLS

In this Gist we will configure VSCode for Elixir debugging. Once done, we will be able to debug any function with any arguments by opening the VSCode Run (a.k.a Debug) view, selecting the "mix run" debug configuration, and entering any invocation such as Example.run(:my_args) into a command palette prompt. This will let us step through the code as it executes and use breakpoints like normal.

This Gist expects you have the ElixirLS: Elixir Support and Debugger extension installed. This Gist is based on version 0.6.2.

1. Create a launch configuration

Create a .vscode/launch.json file at the root of your project if one does not exist already. Modify the file to contain inputs and configurations like the following:

{
    "version": "0.2.0",
    "inputs": [
        // This input allows us to prompt the VSCode user for arguments when we run a debug configuration.
        {
            "id": "runArgs",
            "type": "promptString",
            "description": "Enter arguments for `mix run -e`"
        }
    ],
    "configurations": [
        // This configuration runs `mix run -e ...` with arguments supplied by the user.
        {
            "type": "mix_task",
            "name": "mix run",
            "request": "launch",
            "task": "run",
            // Prompt the VSCode user for arguments with `"${input:runArgs}` and pass those along to `mix run -e ...`
            "taskArgs": [
                "-e", "${input:runArgs}"
            ],
            "startApps": true,
            "projectDir": "${workspaceRoot}",
        }
    ]
}

2. That is it!

That launch configuration will let you run any function with any arguments. Define some breakpoints in the function of interest, then use the mix run debug configuration from the VSCode Run window to exercise it.

Enjoy!

@user20230119
Copy link

user20230119 commented Aug 30, 2023

https://medium.com/geekculture/debugging-phoenix-and-elixir-applications-in-visual-studio-code-5f1b63a6713b says:

If you experience the same issue, make sure you have an application.ex file in /lib.

defmodule DebugApp do
  use Application
  def start(_, _) do
    YourModule.your_function()
    {:ok, self()}
  end
end

Then reference the file in mix.exs.

  def application do
    [
      extra_applications: [:logger],
      mod: {DebugApp, []}
    ]
  end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment