不能直接调试,goland必须依赖远程dlv以--headless --listen=:2345启动调试服务,本地通过remote debug配置连接,且需确保编译带调试信息、端口放行、路径与模块名一致。

GoLand 能不能直接调试远程服务器上的 Go 程序
不能直接调试,GoLand 本身不支持像 PyCharm 那样一键 Attach 到远端进程。它必须依赖 dlv(Delve)在远端启动调试服务,再由本地 GoLand 连接。关键不是“连上服务器”,而是“让 dlv 在远端监听,并打通网络访问”。
远端必须运行 dlv --headless --listen=:X
这是最核心的一步。你得在服务器上手动启动 Delve 的 headless 模式,而不是靠 GoLand 自动部署或启动。常见错误是直接点 “Debug” 就以为能连上——实际 GoLand 根本没往远端发任何构建或启动命令。
-
dlv必须和你要调试的二进制文件用同一套 Go 版本编译(建议用go build -gcflags="all=-N -l"关闭优化) - 监听地址别写
--listen=127.0.0.1:2345,否则本地连不上;得用--listen=:2345或--listen=0.0.0.0:2345 - 如果服务器有防火墙(比如
ufw或云厂商安全组),必须放行2345端口(或你指定的端口) - 推荐加
--api-version=2,GoLand 当前稳定支持的是 Delve v2 API
本地 GoLand 配置 Remote Debug 启动器
GoLand 里新建一个 “Attach to Process” 类型的配置,但选的是 “Attach to remote process”,不是 “Attach to local process”。它本质是 TCP 连接,不是 SSH 隧道自动建立的。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- Host 填服务器公网 IP 或可解析的域名(不是
localhost) - Port 填你远端
dlv --listen=:2345用的端口 - Working directory 设为远端二进制所在路径(用于符号表定位,非必须但强烈建议一致)
- Go module path 要和远端代码的
go.mod里module名完全一致,否则断点不命中
为什么断点不生效或提示 “No executable found”
90% 是路径或符号问题。GoLand 不会自动同步源码,它只靠本地打开的项目结构 + 远端二进制的 debug info 匹配。
- 确保本地项目根目录和远端编译时的 GOPATH / module root 完全一致(比如都是
/home/user/myapp) - 远端二进制必须带 DWARF 调试信息(
go build默认有,但加了-ldflags="-s -w"就没了) - 如果用了
go run main.go启动,没法 attach;必须先go build出二进制,再用dlv exec ./myapp --headless --listen=:2345 - GoLand 的 “Show Disassembly” 或 “Evaluate Expression” 在远端调试时功能受限,别指望和本地一样顺
真正麻烦的是路径映射和符号加载时机——它只在第一次连接时尝试解析一次,改了代码没 rebuild 就重连,断点照样失效。










