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

zvms9eto  于 2023-03-08  发布在  Go
关注(0)|答案(6)|浏览(315)

我有最新的IntelliJ终极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行(main函数中的第一行也是唯一一行代码)选择断点并启动调试会话时,我看到以下输出:

"/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的钻研来更好地理解正在发生的事情:

/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在这行当我打印变量.
有什么想法吗?

dly7yett

dly7yett1#

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

这是我解决问题的方法

我用brew uninstall --force go完全删除了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应用程序了。
谢谢你们所有人的协助!:)

6ioyuze2

6ioyuze22#

对于我的情况(Ubuntu 20.04上的VSCode),如果项目位于符号链接目录(或符号目录的子目录)中,则vscode将显示“未验证”断点和
“创建断点时出错:找不到文件...”
这导致在断点处不停止。

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

会没事的。

hsvhsicv

hsvhsicv3#

对我来说,添加以下内容可解决问题:

export GOROOT="/usr/local/go"

到$HOME/. profile文件。
编辑:我使用的是LiteIde X35.2,带有Delve调试器版本:1.1.0构建:编号:1990
下:
分发= Linux Mint版本= 18.3代码名称= sylvia
发布版本= #41~16.04.1-Ubuntu SMP星期三2018年10月10日20:16:04 UTC UBUNTU代码= xenial内核= 4.15.0 - 38-通用HDWPLATFORM = x86_64
桌面会话= XFCE WINDOWS_MANAGER = XFWM4桌面组件= kdevtmpfs gnome密钥环-d xfce4-会话xfce4-面板xfce4-卷式polkit-gnome-auxfce4-power-man xfce4-终端gnome-pty-helpe
GTK = libgtk-3 - 0:amd64 3.18.9 - 1ubuntu3.3 GStreamer = gst-启动-1.0版本1.8.3 GStreamer 1.8.3 https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

blpfk2vs

blpfk2vs4#

在我的例子中,这个进程已经在那个端口运行,并且没有关闭,所以我不得不手动停止这个进程,然后从IntelliJ重新运行。

67up9zun

67up9zun5#

在我的例子(GoLand)中,问题是在我的调试配置中没有设置标志-trimpath
1."运行"、"调试..."、"编辑配置"
1.在模板项中,转到"Go Test"选项,并在"Go工具参数"中添加参数-trimpath
您还可以在您的环境中使用设置:

go env -w GOFLAGS="-trimpath"

这也适用于"attach to process"调试选项。
你可以在菜单"帮助"、"显示日志文件"中看到GoLand IDE日志。它会让你的生活更轻松。
参考:https://youtrack.jetbrains.com/issue/GO-8277

8qgya5xd

8qgya5xd6#

同样的问题。
GoLand 2022.3.2构建版本号GO-223.8617.58,构建日期:2023年1月27日
降级转到1.19.7版本进行修复。

相关问题