【问题标题】:debugging go application doesn't stop at breakpoints调试 go 应用程序不会在断点处停止
【发布时间】:2017-05-18 05:01:19
【问题描述】:

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

我正在尝试通过为 Go Application 创建调试配置文件来调试 go 应用程序,并且 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/

当我在 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

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

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

更新

尝试使用 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 处创建一个断点。

有什么想法吗?

【问题讨论】:

  • 请从运行配置中禁用 ldflags,然后重试。
  • 你有什么版本的 IDE/Go 插件?您能否提供有关您尝试调试的应用程序的更多详细信息?它有CGO吗?你在使用符号链接吗?应用程序开源是否能够复制这一点?谢谢
  • @eduncan911 有很多使用 IntelliJ 进行调试(或使用 Go 进行调试)。 ufk你在哪里设置断点,它不起作用?我无法使用您提到的相同设置从 IDE 重新创建问题。但是,如果您打算从命令行使用 delve,则需要运行“继续”而不是“步骤”。
  • gogland #GO-171.4424.55(2017 年 5 月 12 日)遇到了这个问题,真的很讨厌。 Go plugin 171.4424.55.1932 根据这里的建议,我用 brew 升级了 delve 并选择了“使用本机”,现在我又进行了调试。谢谢!
  • @ufk 通过 glide 和调试的目录之间不应该有任何关联。如果你使用 nightly 仍然有问题,请在 Youtrack youtrack.jetbrains.com/issues/Go 上打开一个问题并附上日志,你可以通过帮助 | 找到它们显示登录... 此外,在添加日志之前,请转到帮助 |调试日志设置并添加以下行:#com.goide.dlv.DlvVm

标签: debugging go intellij-idea goland


【解决方案1】:

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

“CreateBreakpoint 出错:找不到文件...”

导致不能在断点处停止。

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

会好的。

【讨论】:

    【解决方案2】:

    好吧..我终于明白了。我把 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 应用程序了。

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

    【讨论】:

      【解决方案3】:

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

      export GOROOT="/usr/local/go"
      

      到 $HOME/.profile。

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

      下:

      DISTRIB=LinuxMint VERSION=18.3 CODENAME=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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

          go env -w GOFLAGS="-trimpath"
          

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-04-19
            • 1970-01-01
            • 2013-09-26
            • 2014-12-24
            • 2023-03-12
            • 2018-08-11
            • 1970-01-01
            • 1970-01-01
            • 2023-03-08
            相关资源
            最近更新 更多