Golang调试器未运行

时间:2018-08-30 15:46:01

标签: debugging go visual-studio-code delve

我正在尝试使用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

结构是否不正确?有推荐的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

该错误是因为您正在尝试调试非主程序包。如果您具有使用主功能调试文件的设置,请从主程序包调试文件。否则,您可以创建用于调试整个程序包的设置。但是对于您的问题,只需将软件包名称更改为

'Only performs copy/paste actions on the worksheets that aren't named "Summary".
    For Each sh In ActiveWorkbook. Worksheets 
        If sh.Name < > DestSh.Name Then 
'Sets the Range you want to Copy from the source Worksheets. This range is the set of cells with data in it.
            Set CopyRng = sh. UsedRange

或从具有主要功能的主软件包中运行调试器。要调试整个工作区,请将package main import "fmt" // SendEmail - Sends The email func SendEmail() { } func main() { fmt.Println("Hello World!") i := 101 fmt.Println(i) } 中的设置更改为:

launch.json

答案 1 :(得分:-1)

正如错误所暗示的,您只能调试main程序包(名为main的程序包)-具体来说,因为您只能 run 运行main包。在Go中,二进制文件的起点是名为main()的软件包中名为main的函数。在您的代码中,您有一个名为main()的函数,但它位于名为email的程序包中,该程序包无法内置到程序中,因此无法调试。

此内容在Go游览的第一页上进行了介绍:https://tour.golang.org/basics/1

  

程序开始在软件包main中运行。

以及规范中的https://golang.org/ref/spec#Program_execution

  

一个完整的程序是通过将一个未导入的名为 main package 的软件包与其导入的所有软件包进行可链接的链接而创建的。主程序包必须具有程序包名称main,并声明一个不带参数也不返回值的函数main