How to use Delve debugger in Visual Studio Code

a 夏天 提交于 2019-11-29 23:36:07

For using Delve debugger in Visual Studio Code with Golang, do the following steps:

( Note: for Windows OS replace all $GOPATH with %GOPATH% )
  • Install Latest Golang and set GOROOT and GOPATH
  • Add $GOPATH/bin to your OS PATH environment variable.
  • set environment variable: GO15VENDOREXPERIMENT = 1
  • run: go get github.com/derekparker/delve/cmd/dlv and make sure dlv binary generated in your $GOPATH/bin
  • Install Visual Studio Code
  • Launch VS Code Quick Open (Ctrl+P), paste this command: ext install Go , and press enter.
  • click install Rich Go language support for Visual Studio Code
  • click Enable and restart Visual Studio Code
  • Inside Visual Studio Code Open Folder Ctrl+Shift+E , e.g.: $GOPATH\src\hello\
  • Then Open hello.go from that folder (or make new file Ctrl+N and save it on this folder):
package main

import "fmt"

func main() {
    fmt.Println("Hello World!")
    i := 101
    fmt.Println(i)
}
  • Then Open Debugger Ctrl+Shift+D
  • on this line: i := 101 press F9 to set or toggle beakpoint.
  • Press F5 to start debugging or to Run the application, if asked to select environment: select Go.
  • Press F10 to Step Over.
  • Press F11 to Step Into.
  • Press Shift+F11 to Step Out.
  • Press Shift+F5 to Stop Debugging.
  • Press Ctrl+Shift+F5 to Restart Debugging.

My launch.json untouched:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [],
            "showLog": true
        }
    ]
}

Result:

This launch.json worked for me to run the Golang debugger in VSCode:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch file",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "program": "${file}",
      "env": {
        "PATH": "/usr/local/go/bin:${fileDirname}"
      },
      "args": []
    }
  ]
}

VSCode Variables Reference: If file /home/your-username/your-project/folder/main.go is open in VSCode and

directory /home/your-username/your-project is your root workspace, then

${file} = /home/your-username/your-project/folder/main.go

${fileDirname} = /home/your-username/your-project/folder


My specific values:

$GOROOT: /usr/local/go

$GOPATH: /Users/myname/code

${file}: /Users/myname/code/src/github.com/githubName/appName/main.go

${fileDirname}: /Users/myname/code/src/github.com/githubName/appName

FTA (in case it is hard to find), if when using delve and you get cannot find package error even though your GOPATH is set correctly, check out this bug of vscode-go, it is affecting both MAC OS and Linux, as of October, 2017.

The solution is posted there as well:

... adding the GOPATH as an env var in the env property in the launch.json file solved the problem

Content launch.json for gdb and delve

{
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
    {
        "name": "Delve",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "remotePath": "",
        "port": 2345,
        "host": "127.0.0.1",
        "program": "${workspaceRoot}/src/hello/hello.go",
        "env": {},
        "args": [],
        "showLog": true
    }
   ,
    {
        "type": "gdb",
        "request": "launch",
        "name": "GDB",

        "target": "${workspaceRoot}/src/hello/hello",
        "cwd": "${workspaceRoot}",
        "linux": {
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
    }
]

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!