Golang 调试器未运行

我正在尝试使用 Go 设置 VS Code,但在附加调试器时出现错误。由于我是 VS Code 的新手,所以我不知道为什么。


我已经安装了 delve 调试器:


go get -u github.com/derekparker/delve/cmd/dlv

delv -v 

delv 9.11.3-1ubuntu1.1-Ubuntu

当我尝试将调试器附加到一个非常简单的 golang 文件时出现此错误:


API server listening at: 127.0.0.1:2345

time="2018-08-30T09:39:57-06:00" level=info msg="launching process with args: [/home/craig/Documents/GoLang/src/github.com/mornindew/sharedPackages/email/debug]" layer=debugger

Can not debug non-main package

Process exiting with code: 1

代码:


package email


import "fmt"


// SendEmail - Sends The email

func SendEmail() {


}


func main() {

    fmt.Println("Hello World!")

    i := 101

    fmt.Println(i)

}

这一切都非常有帮助,非常感谢。


这让我觉得我的项目组织有问题。我有一个项目有一堆可重用的包。我不想为每个单独的包创建一个 github 存储库。本质上:


package1

-- package1.go

-- package1_test.go

package2

-- package2.go

-- package2_test.go

...

package10

-- package10.go

-- package10_test.go

这结构不正确吗?有推荐的方法来完成这个吗?


胡子哥哥
浏览 117回答 2
2回答

婷婷同学_

该错误是因为您正在尝试调试非主程序包。如果您有使用 main 函数调试文件的设置,则从 main 包调试文件。否则您可以创建用于调试整个包的设置。但是对于您的问题,只需将包名称更改为package mainimport "fmt"// SendEmail - Sends The emailfunc SendEmail() {}func main() {    fmt.Println("Hello World!")    i := 101    fmt.Println(i)}或者从具有主要功能的主包运行调试器。要调试整个工作区,请将设置更改为launch.json:{    "name": "Remote",    "type": "go",    "request": "launch",    "mode": "remote",    "remotePath": "${workspaceRoot}",    "port": 2345,    "host": "127.0.0.1",    "program": "${workspaceRoot}",    "env": {}}

叮当猫咪

正如错误所暗示的那样,您只能调试一个main包(名为 的包main)——具体来说,因为您只能运行一个main包。在 Go 中,二进制文件的起点是main()包中调用的函数main。在您的代码中,您有一个名为 的函数main(),但它位于一个名为 的包中email,该包无法构建到程序中,因此无法调试。程序开始在 package 中运行main。一个完整的程序是通过将称为主包的单个未导入的包与其导入的所有包可传递地链接起来创建的。主包必须有包名main并声明一个main不接受任何参数且不返回任何值的函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go