【问题标题】:GoLand remote debug shows "could not find <file>"GoLand 远程调试显示“找不到 <file>”
【发布时间】:2019-05-23 11:11:24
【问题描述】:

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

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

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

我在容器中使用 Go 1.12.5,使用以下 delve 命令: 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 看不到我的源代码或在我的断点处停止的建议?

【问题讨论】:

标签: debugging go remote-debugging goland


【解决方案1】:

我遇到了和你类似的情况。

这是我的场景:

  • 在远程机器上构建 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”。

解决方案:

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


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

Goland:2019.1.3,delve:1.2.0,Go:1.12.4

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2018-11-28
    • 2018-03-27
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多