代码之家  ›  专栏  ›  技术社区  ›  mornindew

Golang调试器未运行

  •  -1
  • mornindew  · 技术社区  · 7 年前

    我试图用Go设置VS代码,在附加调试器时出现错误。因为我是全新的VS代码,我没有线索,为什么。

    我已安装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)
    }
    

    这些都很有帮助,非常感谢。

    package1
    -- package1.go
    -- package1_test.go
    package2
    -- package2.go
    -- package2_test.go
    ...
    package10
    -- package10.go
    -- package10_test.go
    

    这是不是结构不正确?有没有推荐的方法来实现这一点?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Himanshu    7 年前

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

    package main
    
    import "fmt"
    
    // SendEmail - Sends The email
    func SendEmail() {
    
    }
    
    func main() {
        fmt.Println("Hello World!")
        i := 101
        fmt.Println(i)
    }
    

    或者使用main函数从主包运行调试器。要调试整个工作区,请更改中的设置 launch.json

    {
        "name": "Remote",
        "type": "go",
        "request": "launch",
        "mode": "remote",
        "remotePath": "${workspaceRoot}",
        "port": 2345,
        "host": "127.0.0.1",
        "program": "${workspaceRoot}",
        "env": {}
    }
    
        2
  •  2
  •   Adrian    7 年前

    正如错误所暗示的,您只能调试 main 包(名为 主要的 )-特别是,因为你只能 运行 包裹。在Go中,二进制的起点是调用 main() . 在代码中有一个函数 主() ,但它在一个叫做 email ,它不能内置到程序中,因此不能进行调试。

    这在围棋之旅的第一页有介绍: https://tour.golang.org/basics/1

    程序开始在包中运行 主要的

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

    主程序包 与它导入的所有包,传递。主程序包必须有程序包名称 主要的 并声明一个函数