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

标签 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) 中附加到它时,并非我的所有符号都已加载。此外,一些断点显示消息:

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

我想调试的代码如下:

enter image description here

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

enter image description here

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

最佳答案

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

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

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

关于debugging - 为什么我的 Go 调试器不加载所有符号,导致调试器中缺少局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49820229/

相关文章:

iphone - 解决从苹果公司获得iphone崩溃日志的步骤

javascript - 我能够通过 Google Chrome 开发者控制台更改 AngularJS $scope 变量是否正确?

go - 如何检查Golang中的 map 是否为空?

ssl - 带有证书、私钥和密码短语的 TLS

windows - WinDbg 窗口符号

debugging - 如何在Rust中的依赖项中设置断点? [复制]

delphi - 我可以更改监视列表中字符串的显示格式吗?

c# - VS 2012 的 LINQ to SQL 调试可视化工具?

go - 提供者未注册交互

objective-c - 将类转储信息导入 GDB