【问题标题】:Debug a Go application on Visual Studio Code在 Visual Studio Code 上调试 Go 应用程序
【发布时间】:2021-12-02 16:45:25
【问题描述】:

我正在尝试在 Visual Studio Code 上调试 Go 应用程序,但它似乎不适合我。这是目录树。

运行流程
为了运行服务器,我首先在终端上运行以下命令

go run -tags=jsoniter cmd/server/*

之后,我通过 Postman 访问 API 来运行各个服务。

调试流程:
同样,我想调试服务(通过 API 命中)。添加一些断点后,我按照说明在.vscode 目录中创建了一个launch.json 文件。

这里是launch.json中的配置

{
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "cmd/server/",
            //"host": "127.0.0.1",
            //"port": 8080,
        },

设置完成后点击“运行”启动服务器,却报错:Failed to launch: could not launch process: can not run under Rosetta, check that the installed build of Go is right for your CPU architecture

我访问了一些网站,他们说这可能是因为我为 Apple M1 芯片使用了错误的 Go 版本。我检查并按照建议使用了正确的版本,但我仍然遇到了同样的问题

$go version
>go version go1.17.3 darwin/arm64

奖励:如果我取消注释两个配置行"host""port",VCS 会告诉我文件错误。当我注释这两行时,它会尝试在随机端口 57169 上启动一个服务器。但是它当然会陷入上述错误。

问题:

  • 我的调试有什么问题吗?目前,我必须通过将log 添加到代码中并跟踪它们来进行调试。我认为这不是最有效的。
  • 如果 VCS 不适合我(很遗憾),您会建议使用其他 IDE/方法进行调试吗?

更新:我按照某人的建议在 GoLand 上进行了尝试,但它对我也不起作用。我收到了同样的错误

【问题讨论】:

    标签: go debugging visual-studio-code apple-m1


    【解决方案1】:

    我创建了一个简单的处理程序并尝试在运行在 Apple M1 芯片上的 vscode 上进行调试。调试器正在为我工​​作。我能够将调试器附加到正在运行的进程。

    launch.json配置 (这里设置processId:0,意味着vscode会给我们一个选项来选择我们要调试的进程)

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Connect to server",
                "type": "go",
                "request": "attach",
                "mode": "local",
                "processId": 0,
            }
        ]
    }
    

    main.go文件:

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8080", nil)
    }
    
    func handler(w http.ResponseWriter, r *http.Request) {
        a := r.URL.Path
        fmt.Fprintf(w, "Hello, %s!", a[1:])
    }
    

    目录结构:

    构建和运行:

    开始调试:(选择进程的选项,我的进程名是vscode-go)

    localhost:8080/test发出请求时调试器工作:

    有关将调试器附加到正在运行的进程的更多详细信息可以找到here

    【讨论】:

    • 非常感谢您的长时间回复。我试图复制你的步骤,但无法实现。我找不到正确的流程(因为您的流程是 vscode-go)。我尝试了几个不同的过程,但没有一个是正确的。
    • 在我的机器上,当我第一次构建然后运行二进制文件时,进程名称与二进制文件名称相同,因此很容易找到。
    猜你喜欢
    • 2016-10-12
    • 2022-06-15
    • 2016-12-27
    • 1970-01-01
    • 2022-07-22
    • 2021-12-22
    • 1970-01-01
    • 2021-06-23
    • 2016-04-01
    相关资源
    最近更新 更多