我已经构建了我的二进制文件: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
有数据,我们可以拉取通过 repo.Find(query)
使用该 query
从数据库中获取数据。但是,在我的调试器中找不到 query
:
所以我不确定此时发生了什么。不幸的是,我对 golang 真的很陌生;这让我很难取得任何进展。
最佳答案
使用 Go 1.10 或更新版本时,为了获得更好的调试体验并去除编译器所做的优化,您需要使用 -gcflags="all=-N -l"构建目标应用程序
.
在Go 1.10之前,你需要使用-gcflags="-N -l"
。
IDE 在编译应用程序进行调试时会自动添加这些标志。
关于debugging - 为什么我的 Go 调试器不加载所有符号,导致调试器中缺少局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49820229/