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

MrD*_*Duk 8 debugging debug-symbols go 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 没有代码

我想调试的代码如下:

在此处输入图片说明

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

在此处输入图片说明

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

dls*_*per 9

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

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

在编译用于调试的应用程序时,IDE 会自动添加这些标志。