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.
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}",
}
]
}
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!
This only partially works for me. When I add a breakpoint and enter a command I get an error:
"debugged process #PID<0.179.0> exited with reason no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started"
However when starting the debugging breakpoints work.
The log points in vscode seem to still work though.
I've tried windows and wsl and both have the same issue.
Tested on this sample repo here
https://github.com/BrooklinJazz/debugging_elixir