当我尝试使用 VS Code 和 dlv 调试此 Go 应用程序时,我收到以下错误:
启动失败:无法启动进程:fork/exec C:\Users\MyUser\Workspaces\goworkspace\github.com...__debug_bin.exe:%1 不是有效的 Win32 应用程序。
但是当我注释掉 kafka 代码(请参考 main.go)然后尝试调试时,调试器工作并且断点被命中。
我已经尝试过的事情:
在其他机器上运行该应用程序,这很有效!
在 Windows 上重新安装 Go。
将应用程序移动到不同的目录。
重新安装和更新 VSCode 和相关的 Golang 扩展/工具。
检查了环境变量,但没有发现任何可疑之处。
阻止了 Windows Defender,但这也不起作用。
运行“Windows 内存诊断”工具。
重新安装 tdm-gcc(由 kafka 使用)
使用 Jetbrains Goland,但出现类似错误
无法启动进程:fork/exec C:\Users\MyUser\AppData\Local\Temp\GoLand___go_build_main_go.exe:%1 不是有效的 Win32 应用程序。
- 从 Windows 终端使用 'dlv debug' 命令,再次得到类似的错误
无法启动进程:fork/exec C:\Users\MyUser\Workspaces\goworkspace\github.com\org\app-name\cmd__debug_bin: %1 不是有效的 Win32 应用程序。
版本详情:
- 视窗 10 专业版 20H2
- GoLand 2021.2.3
- go 版本 go1.17.1 windows/amd64
- Delve 调试器 Delve 调试器
- VS 代码版本 1.60.2
请参考下面的代码,
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
请让我知道我是否应该将此问题发布到某个特定的论坛/社区。