首页 > 解决方案 > 无法使用 VSCode/GoLand 在 Windows 上调试 Go 代码(获取“%1 不是有效的 Win32 应用程序”)

问题描述

当我尝试使用 VS Code 和 dlv 调试此 Go 应用程序时,我收到以下错误:

启动失败:无法启动进程:fork/exec C:\Users\MyUser\Workspaces\goworkspace\github.com...__debug_bin.exe:%1 不是有效的 Win32 应用程序。

但是当我注释掉 kafka 代码(请参考 main.go)然后尝试调试时,调试器工作并且断点被命中。

我已经尝试过的事情:

无法启动进程:fork/exec C:\Users\MyUser\AppData\Local\Temp\GoLand___go_build_main_go.exe:%1 不是有效的 Win32 应用程序。

无法启动进程:fork/exec C:\Users\MyUser\Workspaces\goworkspace\github.com\org\app-name\cmd__debug_bin: %1 不是有效的 Win32 应用程序。

版本详情:

请参考下面的代码,

main.go

func main() {
log.Println("Starting api server")

cfg, err := config.LoadConfig()
if err != nil {
    log.Fatalf("LoadConfig: %v", err)
}

//Kakfa Code Begin
c, err := kafka.NewKafkaConsumer(cfg)
if err != nil {
    log.Fatalf("Kafka Consumer Creation: %v", err)
}
kafka.ListenToTopics(cfg, c, []string{"topic-name"})
//Kafka Code End

}

卡发网

package kafka

import (
    "encoding/binary"
    "fmt"

    "github.com/my-user/config"
    "gopkg.in/confluentinc/confluent-kafka-go.v1/kafka"
)

func NewKafkaConsumer(cfg *config.Config) (*kafka.Consumer, error) {

    config := cfg.Kafka

    return kafka.NewConsumer(&kafka.ConfigMap{
        "bootstrap.servers": config.BootstrapServers,
        "security.protocol": config.SecurityProtocol,
        "sasl.mechanisms":   config.SASLMechanisms,
        "sasl.username":     config.SASLUsername,
        "sasl.password":     config.SASLPassword,
        "group.id":          config.GroupID,
        "auto.offset.reset": config.AutoOffsetReset,
    })
}

func ListenToTopics(cfg *config.Config, c *kafka.Consumer, topics []string) {
    c.SubscribeTopics(topics, nil)

    for {
        msg, err := c.ReadMessage(-1)
        defer c.Close()
        if err == nil {
            schemaID := binary.BigEndian.Uint32(msg.Value[1:5])
            schema, err := getLatestAVROSchemaById(cfg, int(schemaID))
            if err != nil {
                panic(fmt.Sprintf("Error getting the schema with id '%d' %s", schemaID, err))
            }
            native, _, _ := schema.Codec.NativeFromBinary(msg.Value[5:])
            value, _ := schema.Codec.TextualFromNative(nil, native)
            fmt.Printf("Here is the message %s\n", string(value))
        } else {
            fmt.Printf("Error consuming the message: %v (%v)\n", err, msg)
        }
    }
}

去环境

set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\MyUser\AppData\Local\go-build
set GOENV=C:\Users\MyUser\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\MyUser\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\MyUser\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.1
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\MyUser\AppData\Local\Temp\go-build3863829792=/tmp/go-build -gno-record-gcc-switches

请让我知道我是否应该将此问题发布到某个特定的论坛/社区。

标签: windowsvisual-studio-codegolanddelveconfluent-kafka-go

解决方案


推荐阅读