为什么我的 Go 调试器不加载所有符号,导致调试器中缺少局部变量?

Why doesn't my Go debugger load all symbols, causing local variables to be missing from the debugger?

我构建了我的二进制文件:go build -gcflags "$gc_flags" -o ./bin/grafana-server ./pkg/cmd/grafana-server,其中 $gc_flags'-N -l'

当我 运行 这个文件 ./bin/grafana-server 并在我的调试器 (Goland) 中附加到它时,并不是我的所有符号都被加载。此外,一些断点显示消息:

no code at /Users/.../file.go:186

我要调试的代码如下:

添加 到原始项目的部分是第 186-199 行。你可以看到执行已经进入 for _, .. 循环(第 196 行),表明 query 有数据,我们可以使用 query 从数据库中提取数据] 通过 repo.Find(query)。但是,query 在我的调试器中找不到:

所以我不确定此时发生了什么。不幸的是,我对 golang 真的很陌生;这让我很难取得任何进展。

使用 Go 1.10 或更新版本时,为了获得更好的调试体验并去除编译器所做的优化,您需要使用 -gcflags="all=-N -l".

构建目标应用程序

在 Go 1.10 之前,您需要使用 -gcflags="-N -l".

IDE 在编译应用程序进行调试时自动添加这些标志。