dsij89625 2019-07-31 12:02
浏览 525
已采纳

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

I am writing a CLI in go using VS code editor. I am not able to figure out how to debug a code section.

My directory structure is :

- test
  - main.go
  - cmd
    - login.go
    - root.go
  1. I have set breakpoints in login.go but if I run "Start Debugging" in this file, I get error
Can not debug non-main package
Process exiting with code: 1
  1. I tried running debugger in main.go but the debugger won't go to login.go file as I we have not explicitly written 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.
  1. main.go file
package main

import "test/cmd"

func main() {
  cmd.Execute()
}
  1. login.go file
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")
}
  1. settings.json
{
    "go.gopath":"/Users/deepakpatankar/go"
}
  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": []
        }
    ]
}

Please guide me how I can see the variable values in debug mode like for variable name. Though using Println is fine, but this source code is part of a bigger project, so I want to see how I can use the debugger ?

  • 写回答

2条回答 默认 最新

  • doushi1929 2019-07-31 12:59
    关注

    You can add flags to the "args": [] array in your vscode settings like this:

    "args": ["login", "-u", "username", "-p", "password"]
    

    This will make sure when you run debug you end up in the login command with the given flags.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!