8

我有最新的 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

test2.go包含:

package main

import "fmt"

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

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

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

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

"/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当我打印变量时,我在该行创建一个断点。

有任何想法吗 ?

4

5 回答 5

4

好的..我终于明白了。我把 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

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

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

谢谢大家帮助我!:)

于 2017-05-28T22:56:03.673 回答
1

对于我的情况(Ubuntu 20.04 上的 VSCode),如果项目位于符号链接目录(或符号目录的子目录)内,vscode 将显示“未验证”断点和

“CreateBreakpoint 上的错误:找不到文件……”

这导致不会在断点处停止。

cd \`readlink -f <project dir>\` && code . 

会好的。

于 2020-04-15T23:29:10.123 回答
0

就我而言,该进程已经在该端口运行并且没有关闭。所以我不得不手动停止该过程并从 IntelliJ 再次运行。

于 2018-12-26T07:22:48.750 回答
0

对我来说,问题已解决,添加:

export GOROOT="/usr/local/go"

到 $HOME/.profile。

编辑:我正在使用 LiteIde X35.2,带有 Delve 调试器版本:1.1.0 构建:$Id:1990ba12450cab9425a2ae62e6ab988725023d5c $

在下面:

DISTRIB=LinuxMint 版本=18.3 代号=sylvia

RELEASE=#41~16.04.1-Ubuntu SMP 2018 年 10 月 10 日星期三 20:16:04 UTC UBUNTU_CODENAME=xenial KERNEL=4.15.0-38-generic HDWPLATFORM=x86_64

DESKTOP_SESSION=XFCE WINDOWS_MANAGER=XFWM4 DESKTOP_COMPONENTS=kdevtmpfs gnome-keyring-d xfce4-session xfce4-panel xfce4-volumed polkit-gnome-au xfce4-power-man xfce4-terminal gnome-pty-helpe

GTK=libgtk-3-0:am​​d64 3.18.9-1ubuntu3.3 GStreamer=gst-launch-1.0 版本 1.8.3 GStreamer 1.8.3 https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

于 2018-11-12T23:51:47.920 回答
0

在我的情况下(GoLand),问题-trimpath在于我的调试配置中没有设置标志:

  1. “运行”、“调试...”、“编辑配置”。
  2. 在模板项中,转到“Go Test”选项并-trimpath在“Go tool arguments”中添加参数

您还可以在您的环境中设置:

go env -w GOFLAGS="-trimpath"

这也适用于“附加到进程”调试选项。

您可以在菜单“帮助”、“显示日志文件”中看到 GoLand IDE 日志。它会让你的生活更轻松。

参考:https ://youtrack.jetbrains.com/issue/GO-8277

于 2021-03-10T17:01:10.277 回答