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

ufk*_*ufk 7 debugging intellij-idea go goland

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

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

根据Go tool arguments我的-ldflags="-linkmode internal"配置.

当我在有一些断点时启动调试会话时,它会运行但不会停在这些断点处.

我错过了什么?

谢谢

更新

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

test1.go 包含:

package main

const Numb uint64 = 5
Run Code Online (Sandbox Code Playgroud)

test2.go 包含:

package main

import "fmt"

func main() {
    fmt.Println(Numb);
}
Run Code Online (Sandbox Code Playgroud)

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

Run kind: package
Package: github.com/kfirufk/test
Working Directory: /usr/local/Cellar/go/1.8.1/src/github.com/kfirufk/test/
Run Code Online (Sandbox Code Playgroud)

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

"/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
Run Code Online (Sandbox Code Playgroud)

我正确地得到了程序的输出但是Intellij没有在所需的断点处停止.

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

更新

试图玩intellij的钻石尝试更好地了解正在发生的事情:

/Users/ufk/Library/Application\ Support/IntelliJIdea2017.1/intellij-go/lib/dlv/mac/dlv exec ./test
Run Code Online (Sandbox Code Playgroud)

然后我执行了:

(dlv) step
Run Code Online (Sandbox Code Playgroud)

并收到:

Command failed: could not find FDE for PC 0x78bc000
Run Code Online (Sandbox Code Playgroud)

我没有理解如何使用钻孔或者这里的东西不能正常工作?

更新

yeap .. continue调试器适用于两个版本的delve(从homebrew和intellij的版本安装).但仍然intellij工作相同,不止于断点.我test2.go在打印变量时在行处创建一个断点.

有任何想法吗 ?

ufk*_*ufk 5

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

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

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

export GOPATH=$HOME/golang
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
Run Code Online (Sandbox Code Playgroud)

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

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

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