我有最新的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
处创建一个断点。
任何想法?
答案 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
:
-trimpath
您还可以在您的环境中设置:
go env -w GOFLAGS="-trimpath"
这也适用于“附加到进程”调试选项。
您可以在菜单“帮助”、“显示日志文件”中看到 GoLand IDE 日志。它会让您的生活更轻松。