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

当我运行本地调试器时,我的断点起作用。当我使用“Go Remote”配置时,我所有的断点都变成一个斜线,并且注释显示“找不到FILENAME”。

我验证了我的源文件在服务器(容器)和客户端上的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无法看到我的源代码或无法在断点处停止的建议?

最佳答案

我也遇到过类似的情况。

这是我的情况:

  • 在远程计算机上构建go二进制文件,但超出了GOPATH目录(使用Go Module)。
  • 在docker容器中运行的
  • ,使用主机中的delve直接附加到docker容器pid。
  • dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient attach $PID
  • 本地源代码在GOPATH下,使用Mac笔记本电脑上的GoLand连接到远程delve服务器。
  • 我可以看到Goroutine信息,但是断点不起作用,并说“找不到XXX”。

  • 解决方案:

    debugging - GoLand远程调试显示 “could not find <file>”-LMLPHP

    在Goland设置中启用“Go模块集成” ,它可以工作!

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

    戈兰德:2019.1.3,钻探:1.2.0,戈:1.12.4

    希望这会帮助你。

    关于debugging - GoLand远程调试显示 “could not find <file>”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56273958/

    10-09 12:46