调试在命令行中有效,但在UI中未命中断点

时间:2019-09-13 05:44:53

标签: unit-testing go visual-studio-code delve

我已在Windows 10计算机上安装了以下软件:

  • VS代码-版本1.38.1
  • Golang-版本go1.13
  • Delve-版本1.3.0

我已经在环境变量中设置了GOROOT和GOPATH。我的GOPATH具有以下三个文件夹:

  • src
  • bin
  • pkg

在src下,我创建了一个基本的sam-app。它会自动创建main_test.go文件。当我执行“调试测试”时,UI中没有断点。但是,我能够在命令行中使用dlv进行调试。

  • 我在launch.json中尝试了不同的配置。他们都没有工作。在我朋友的机器上,即使没有配置,UI调试也可以工作

  • 在VS Code设置中->节点调试->自动附加->我已将'on'设置为

  • 我已关闭VS Code,然后重新打开。它不起作用

  • 我已经以管理员身份打开了VS Code,它也没有起作用

  • 我已经卸载并重新安装了VS Code

  • 我已经卸载并重新安装了Golang

  • 我已经在VS Code中安装了Go扩展程序

    package main
    
    import (
        "fmt"
        "net/http"
        "net/http/httptest"
        "testing"
    
        "github.com/aws/aws-lambda-go/events"
    )
    
    func TestHandler(t *testing.T) {
        t.Run("Unable to get IP", func(t *testing.T) {
            DefaultHTTPGetAddress = "http://127.0.0.1:12345"
    
            _, err := handler(events.APIGatewayProxyRequest{})
            if err == nil {
                t.Fatal("Error failed to trigger with an invalid request")
            }
        })
    
        t.Run("Non 200 Response", func(t *testing.T) {
            ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                w.WriteHeader(500)
            }))
            defer ts.Close()
    
            DefaultHTTPGetAddress = ts.URL
    
            _, err := handler(events.APIGatewayProxyRequest{})
            if err != nil && err.Error() != ErrNon200Response.Error() {
                t.Fatalf("Error failed to trigger with an invalid HTTP response: %v", err)
            }
        })
    
        t.Run("Unable decode IP", func(t *testing.T) {
            ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                w.WriteHeader(500)
            }))
            defer ts.Close()
    
            DefaultHTTPGetAddress = ts.URL
    
            _, err := handler(events.APIGatewayProxyRequest{})
            if err == nil {
                t.Fatal("Error failed to trigger with an invalid HTTP response")
            }
        })
    
        t.Run("Successful Request", func(t *testing.T) {
            ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                w.WriteHeader(200)
                fmt.Fprintf(w, "127.0.0.1")
            }))
            defer ts.Close()
    
            DefaultHTTPGetAddress = ts.URL
    
            _, err := handler(events.APIGatewayProxyRequest{})
            if err != nil {
                t.Fatal("Everything should be ok")
            }
        })
    }
    

我希望在调试main.go或main_test.go时在UI中找到断点。

更新:

我将VS代码降级到1.30.2并安装了Go扩展和Delve之后,调试时出现以下错误:

“调试适配器进程意外终止(读取错误)”

1 个答案:

答案 0 :(得分:0)

我如下解决了该问题:

  • 仅删除了'%USERPROFILE%\。vscode \ extensions \ ms-vscode.go-0.11.4'文件夹并重新安装了Go扩展名-无效

  • 删除了整个'%USERPROFILE%\。vscode'文件夹并重新安装了Go扩展名-起作用了:)

某些其他扩展名是错误的,因此Go调试失败。清理所有扩展程序即可修复它。

希望,这可能对其他人有用。