VS Code 中除 main.go 之外的调试文件

Dee*_*kar 0 go visual-studio-code delve go-cobra

我正在使用 VS 代码编辑器在 go 中编写 CLI。我无法弄清楚如何调试代码部分。

我的目录结构是:

- test
  - main.go
  - cmd
    - login.go
    - root.go
Run Code Online (Sandbox Code Playgroud)
  1. 我在 login.go 中设置了断点,但是如果我在这个文件中运行“开始调试”,我会收到错误
Can not debug non-main package
Process exiting with code: 1
Run Code Online (Sandbox Code Playgroud)
  1. 我尝试在 main.go 中运行调试器,但调试器不会去 login.go 文件,因为我没有明确地写 test login
API server listening at: 127.0.0.1:48423
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
cd .
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
  test [command]

Available Commands:
  help        Help about any command
  login       A brief description of your command

Flags:
      --config string   config file (default is $HOME/.test.yaml)
  -h, --help            help for test
  -t, --toggle          Help message for toggle

Use "test [command] --help" for more information about a command.
Run Code Online (Sandbox Code Playgroud)
  1. main.go 文件
package main

import "test/cmd"

func main() {
  cmd.Execute()
}
Run Code Online (Sandbox Code Playgroud)
  1. login.go 文件
package cmd

import (
    "fmt"
    "github.com/spf13/cobra"
)

// loginCmd represents the login command
var loginCmd = &cobra.Command{
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("login called")
        name, _ := cmd.Flags().GetString("username")
        pwd, _ := cmd.Flags().GetString("password")
        userInfo := name + ":" + pwd
    },
}

func init() {
    rootCmd.AddCommand(loginCmd)

    // Here you will define your flags and configuration settings.
    loginCmd.Flags().StringP("username", "u", "", "Specifies the user")
    loginCmd.Flags().StringP("password", "p", "", "Specifies the password for the user")
    loginCmd.Flags().StringP("manager", "m", "", "Specifies the environement where user wants to login")
}
Run Code Online (Sandbox Code Playgroud)
  1. settings.json
{
    "go.gopath":"/Users/deepakpatankar/go"
}
Run Code Online (Sandbox Code Playgroud)
  1. launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${fileDirname}",
            "env": {},
            "args": []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

请指导我如何在调试模式下查看变量值,例如变量名。虽然使用 Println 很好,但是这个源代码是一个更大项目的一部分,所以我想看看如何使用调试器?

Wen*_* Li 8

修改你的launch.json如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [],
            "port": 8080,
            "host": "127.0.0.1"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

您将了解到与您的有些不同。

...
"mode": "debug",
"program": "${workspaceRoot}",
...
Run Code Online (Sandbox Code Playgroud)