Golang 调试器没有 运行
Golang Debugger Not Running
我正在尝试使用 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
这是结构错误吗?有推荐的方法来完成这个吗?
如错误所示,您只能调试 main
包(名为 main
的包)- 具体来说,因为您只能 运行 一个 main
包。在 Go 中,二进制文件的起点是名为 main
的包中名为 main()
的函数。在您的代码中,您有一个名为 main()
的函数,但它位于一个名为 email
的包中,该包无法构建到程序中,因此无法调试。
这在 Go 之旅的第一页上有介绍:https://tour.golang.org/basics/1
Programs start running in package main
.
以及规范中的内容:https://golang.org/ref/spec#Program_execution
A complete program is created by linking a single, unimported package called the main package with all the packages it imports, transitively. The main package must have package name main
and declare a function main
that takes no arguments and returns no value.
错误是因为您正在尝试调试非主程序包。如果您有使用 main 函数调试文件的设置,则从 main 包调试文件。否则您可以创建用于调试整个包的设置。但是对于您的问题,只需将包名称更改为
package main
import "fmt"
// SendEmail - Sends The email
func 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": {}
}
我正在尝试使用 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
这是结构错误吗?有推荐的方法来完成这个吗?
如错误所示,您只能调试 main
包(名为 main
的包)- 具体来说,因为您只能 运行 一个 main
包。在 Go 中,二进制文件的起点是名为 main
的包中名为 main()
的函数。在您的代码中,您有一个名为 main()
的函数,但它位于一个名为 email
的包中,该包无法构建到程序中,因此无法调试。
这在 Go 之旅的第一页上有介绍:https://tour.golang.org/basics/1
Programs start running in package
main
.
以及规范中的内容:https://golang.org/ref/spec#Program_execution
A complete program is created by linking a single, unimported package called the main package with all the packages it imports, transitively. The main package must have package name
main
and declare a functionmain
that takes no arguments and returns no value.
错误是因为您正在尝试调试非主程序包。如果您有使用 main 函数调试文件的设置,则从 main 包调试文件。否则您可以创建用于调试整个包的设置。但是对于您的问题,只需将包名称更改为
package main
import "fmt"
// SendEmail - Sends The email
func 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": {}
}