我正在尝试调试在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无法看到我的源代码或无法在断点处停止的建议?
答案 0 :(得分:0)
我遇到过与您类似的情况。
这是我的情况:
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient attach $PID
解决方案:
在Goland设置中启用“ Go Modules集成” ,并且可以使用!
也许我在构建时使用Go Module,而Goland自己实现了delve客户,所以我应该启用Goland Go Module集成以让Goland正确对待源代码路径。
Goland:2019.1.3,delve:1.2.0,Go:1.12.4
希望这会对您有所帮助。