A go debugger for atom using delve.
Either apm install go-debug
or search for go-debug
in the settings.
go-debug
tries to install/download delve automatically.
If this fails you can still do it manually by using this guide: https://github.com/derekparker/delve/tree/master/Documentation/installation
Use F5 to launch the debug window (the one on the right). At selected line press F9 to set (or toggle) break point. other function keys.
go-debug
has two built-in configurations. Both work on the file/package that is currently open in atom.
Debug
: compile and debug the current packageTest
: compile and debug the tests of the current packageIt's possible to create additional configurations by creating a file and setting the path in the go-debug
setting Configuration File
. You can even specify multiple configurations by separating the paths in this setting with commas. Relative paths will be resolved relative to the current project.
Such a configuration file looks like:
{
"configurations": [
{ /* a configuration */ },
{ /* another configuration */ },
// ...
]
}
Each configuration supports the following options:
{
// "name" is the display name in the panel (REQUIRED)
"name": "...",
// "mode" determines how to start / connect to delve (REQUIRED)
// * debug is used to debug a package
// * test debugs the tests of the package
// * remote connects to an already running headless delve session on a remote server (see "host" and "port" below)
// * exec debugs a precompiled executable (see "program" below)
"mode": "debug" | "test" | "remote" | "exec",
// used to pass arguments to the executed package / tests (e.g. "-v").
"args": ["..."],
// use this if you have to specify additional environment variables.
"env": { "<key>": "<value>" },
// "cwd" specifies the current working directory where delve starts from.
// This is useful if you always want to debug/test a specific package (e.g. the "main" package) but are currently working on another package
"cwd": "<dir>",
// "host" and "port" are used to modify the default port of the locally running delve server.
// If "mode" is "remote" then these define the host and port of the server where a "headless" delve is running.
"host": "localhost",
"port": 2345,
// "program" contains the path to a precompiled executable that should be debugged.
// (useful if you have a custom build chain like gb)
"program": "<path>",
// pass additional build flags when delve compiles the package/tests.
"buildFlags": "",
// a path to the "init" file that will be executed once delve has started.
"init": "<path>",
// turns on/off (default) the "verbose" logging for delve (useful if you encounter problems with delve or go-debug).
"showLog": true | false
}
All string options can make use of the following variables by using ${...}
somewhere inside the string:
{
// the working directory on startup of atom
cwd: "...",
// the open file (full path)
file: "...",
// the open file's basename
fileBasename: "...",
// the open file's dirname
fileDirname: "...",
// the open file's extension
fileExtname: "...",
// the open file relative to the "workspaceRoot" variable
relativeFile: "...",
// the full path of the project root folder
workspaceRoot: "...",
// this contains all environment variables known to atom including the "env" variables from above.
// They can be used like so "${env.GOPATH}/src/..."
env: { "<key>": "<value>" }
}
Note: go-debug
also supports the configuration for vscode which are stored in .vscode/launch.json
. But be aware that not all configurations might work!
Always debug the cmd
of your program wherever you are right now in your code and add some arguments and environment variables:
{
"name": "Debug cmd",
"mode": "debug",
"cwd": "${workspaceRoot}/cmd",
"args": ["--connection=sql"],
"env": {
"USER": "ROOT",
"PW": "SECRET!"
}
}
Start tests with verbose flag:
{
"name": "Verbose Test",
"mode": "test",
"args": ["-test.v"]
}
f5
starts the current selected configurationshift-f5
restarts the current delve session (r / restart
)f6
stops delve (exit / quit / q
)f8
continue the execution (c / continue
)f9
toggle breakpointf10
step over to next source line (n / next
)f11
step into functions (s / step
)shift-f11
step out of functions (stepOut
)cmd-k cmd-g
(mac) / ctrl-k ctrl-g
(others) toggles the main panel