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

时间:2017-05-18 05:01:20

标签: debugging go intellij-idea goland

我有最新的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没有在所需的断点处停止。

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

更新

尝试与intellij's deve玩,试图更好地了解正在发生的事情:

/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或者是否在这里无法正常工作?

更新

yeap ..使用continue调试器可以正常使用两个版本的delve(从自制软件和intellij&s;版本安装)。但仍然intellij工作相同,不会在断点处停止。当我打印变量时,我在行的test2.go处创建一个断点。

任何想法?

5 个答案:

答案 0 :(得分:1)

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

这就是我解决问题的方法

我完全删除了brew uninstall --force 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应用程序了。

谢谢大家的帮助! :)

答案 1 :(得分:0)

对我来说,问题已解决:

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   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:amd64 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

答案 2 :(得分:0)

就我而言,该进程已经在该端口上运行并且没有关闭。因此,我不得不手动停止该过程,然后从IntelliJ重新运行。

答案 3 :(得分:0)

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

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

这导致无法在断点处停止。

grep

会没事的。

答案 4 :(得分:0)

就我而言 (GoLand),问题在于我的调试配置中未设置标志 -trimpath

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

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

go env -w GOFLAGS="-trimpath"

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

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

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