调试 go 应用程序不会在断点处停止

标签 debugging go intellij-idea goland

我有最新的 IntelliJ Ultimate EAP 和最新的 Gogland,在 MacOS Sierra 下都出现了问题。

我正在尝试通过为 Go Application 创建调试配置文件来调试 go 应用程序,并且 Run Kind 被配置为 Package,其中包含当前项目的包名称。

Go 工具参数 下,我配置了 -ldflags="-linkmode internal"

当我在有一些断点的情况下启动调试 session 时,它会运行但不会在这些断点处停止。

我错过了什么?

谢谢

更新

好的,我能够通过以下项目重现该问题:

test1.go 包含:

package main

const Numb uint64 = 5

test2.go 包含:

package main

import "fmt"

func main() {
    fmt.Println(Numb);
}

我使用以下参数创建了一个 Go 应用程序 运行/调试配置:

Run kind: package
Package: github.com/kfirufk/test
Working Directory: /usr/local/Cellar/go/1.8.1/src/github.com/kfirufk/test/

当我在 test2.go 第 6 行(主函数中的第一行也是唯一一行代码)上选择断点并启动调试 session 时,我看到以下输出:

"/Users/ufk/Library/Application Support/IntelliJIdea2017.1/Go/lib/dlv/mac/dlv" --listen=localhost:53111 --headless=true exec /private/var/folders/cn/n7rwdd_95_l54s3zdnbxvw040000gn/T/Unnamedgo --
GOROOT=/usr/local/Cellar/go/1.8.1/libexec
GOPATH=/usr/local/opt/go
/usr/local/Cellar/go/1.8.1/libexec/bin/go build -o /private/var/folders/cn/n7rwdd_95_l54s3zdnbxvw040000gn/T/Unnamedgo -gcflags "-N -l" github.com/kfirufk/test
API server listening at: 127.0.0.1:53111
5

我正确地获得了程序的输出,但 Intellij 没有在所需的断点处停止。

问题在 MacOS Sierra 10.12.4 上使用 Go Lang 插件 0.171.1928 在 Intellij 2017.1.3 上重现。

更新

尝试使用 intellij 的 delve 来更好地理解正在发生的事情:

/Users/ufk/Library/Application\ Support/IntelliJIdea2017.1/intellij-go/lib/dlv/mac/dlv exec ./test

然后我执行了:

(dlv) step

并收到:

Command failed: could not find FDE for PC 0x78bc000

我是不是没能理解如何使用 Delve,或者这里有什么地方不能正常工作?

更新

是的.. 使用 continue 调试器可以在两个版本的 delve 上正常工作(从 homebrew 和 intellij 的版本安装)。但 intellij 的工作原理是一样的,不会在断点处停止。当我打印变量时,我在 test2.go 处创建了一个断点。

有什么想法吗?

最佳答案

好的..我终于明白了。我混淆了 GOROOT 结构和 GOPATH 结构,我将我的项目放在 GOROOT 而不是 GOPATH 中。

这就是我为解决问题所做的

我完全删除了 go with brew uninstall --force go,然后重新安装了 go with 以下环境变量:

export GOPATH=$HOME/golang
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin

然后我把我的项目放在~/golang/src/github.com/kfirufk/windy-server

我终于能够正确调试 go 应用程序了。

谢谢大家对我的帮助! :)

关于调试 go 应用程序不会在断点处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44038930/

相关文章:

go - 在 go 中删除跟踪中的模块路径

java - 如何在有状态 session bean 上下文查找期间定义名称?

java - @JsonView 注释不起作用

.net - 如何在 Visual Studio 2008 调试器中查看 GUID 的值?

go - 跨多个 goroutine 使用单个互斥锁

在 VSCode 中调试 Eigen

image - 如何使用 Go 为 X11/Wayland 的多个屏幕添加背景图像?

java - 当我使用 IntelliJ 构建代码时出现错误

ruby-on-rails - 在不编辑源代码的情况下调用方法并从 Rails 控制台启动调试?

python - 调试 Ruby/Python/Groovy