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

时间:2018-04-13 15:14:44

标签: debugging go debug-symbols delve goland

我用以下内容构建了我的二进制文件:go build -gcflags" $ gc_flags" -o ./bin/grafana-server ./pkg/cmd/grafana-server,其中$ gc_flags是' -N -l'。 当我运行这个文件./bin/grafana-server,并在我的调试器(Goland)中附加到它时,并非所有符号都被加载。此外,一些断点显示消息:   没有代码在/Users/.../file.go:186 我想调试的代码如下: 我在原始项目中添加的部分是第186-199行。你可以看到执行已经进入for _,..循环(第196行),表明查询有数据,我们能够通过repo.Find(查询)使用该查询从数据库中提取数据。但是,在我的调试器中找不到查询: 因此,我不确定此时发生了什么。不幸的是,我真的很不高兴。这让我难以取得任何进展。

1 个答案:

答案 0 :(得分:2)

使用Go 1.10或更高版本时,为了获得更好的调试体验并删除编译器所做的优化,您需要使用-gcflags="all=-N -l"构建目标应用程序。

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

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