GoLand远程调试显示“找不到<文件>”

时间:2019-05-23 11:11:25

标签: debugging go remote-debugging goland

我正在尝试调试在Docker容器中运行的单文件Go应用程序,使用该容器中的delve并在Mac笔记本电脑上使用GoLand。

当我运行本地调试器时,我的断点起作用。当我使用“转到远程”配置时,我所有的断点都变成一个斜线,并且注释中写着“找不到文件名”。

我已验证我的源文件在服务器(容器)和客户端上的GOPATH相对路径相同。

我通过以下delve命令在容器中使用Go 1.12.5: dlv debug --headless --listen=:8044 --api-version=2 --accept-multiclient

它将src/github.com/flinkt/reverseProxy/reverseProxy.go正确构建为bin/reverseProxy,并在收到期望的http请求时开始输出期望的消息。

我的GoLand版本是2019.1。该配置到达localhost 8043,并且没有其他字段被填充。

docker容器正在通过安装源,因此我确定他们正在查看完全相同的源文件。

项目配置的内容根目录位于src/bin/目录的上方,并且也被设置为项目GOPATH。没有全局GOPATH,所有依赖项都在src/树中。会为所有内容建立索引的复选框已选中。

关于为什么我的IDE无法看到我的源代码或无法在断点处停止的建议?

1 个答案:

答案 0 :(得分:0)

我遇到过与您类似的情况。

这是我的情况:

  • 在远程计算机上构建go二进制文件,但不在GOPATH目录中(使用Go模块)。
  • 在docker容器中运行,使用主机中的delve直接附加到docker容器pid。

dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient attach $PID

  • 本地源代码在GOPATH下,使用Mac笔记本电脑上的GoLand连接到远程delve服务器。
  • 我可以看到Goroutine信息,但是断点不起作用,说“找不到XXX”。

解决方案:

go modules

在Goland设置中启用“ Go Modules集成” ,并且可以使用!


也许我在构建时使用Go Module,而Goland自己实现了delve客户,所以我应该启用Goland Go Module集成以让Goland正确对待源代码路径。

Goland:2019.1.3,delve:1.2.0,Go:1.12.4

希望这会对您有所帮助。