lloiser / go-debug

🐛 A go debugger for atom using delve.
https://atom.io/packages/go-debug
MIT License
388 stars 21 forks source link
atom debug debugger delve go golang

go-debug

A go debugger for atom using delve.

Demo

Install

Either apm install go-debug or search for go-debug in the settings.

Install delve

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

Usage

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.

Configuration

go-debug has two built-in configurations. Both work on the file/package that is currently open in atom.

It'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!

Examples

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"]
}

Key bindings

Links