Windows VSCode远程调试VirtualBox中Go应用遇dlv连接关闭问题
解决VSCode远程调试VirtualBox内Go应用的连接关闭问题
核心排查方向(基于CLI可连接的前提)
既然dlv cli能成功连接,说明VirtualBox端口转发、Linux端dlv服务启动都正常,问题集中在VSCode的launch.json配置细节上。
1. 修正launch.json的关键配置项
以下是经过验证的正确配置模板,对照你的配置修改:
{ "version": "0.2.0", "configurations": [ { "name": "Remote Debug Linux Go", "type": "go", "request": "attach", "mode": "remote", "remotePath": "/home/你的用户名/go项目的绝对路径", // 必须和Linux端项目路径完全一致 "port": 2345, // 和VirtualBox转发的端口、dlv启动的端口一致 "host": "127.0.0.1", // Windows本地回环,对应端口转发到本地 "apiVersion": 2, // 关键:指定dlv API版本,避免兼容性问题 "showLog": true // 开启日志便于排查后续问题 } ] }
2. 常见错误点排查
- remotePath必须完全匹配:Linux端Go项目的绝对路径要一字不差,不能用
~/xxx或相对路径,比如Linux端项目在/home/user/demo-go,这里就必须写完整路径。 - apiVersion缺失:旧版VSCode Go插件默认不指定API版本,和高版本dlv存在兼容性问题,手动添加
"apiVersion": 2即可。 - 端口冲突:确认Windows本地2345端口未被占用,可通过命令检查:
netstat -ano | findstr :2345 - dlv启动参数正确:Linux端启动dlv时必须带
--headless、--listen参数,且允许外部连接,正确命令示例:# 调试源码 dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient # 调试已编译二进制 dlv exec ./your-app --headless --listen=:2345 --api-version=2 --accept-multiclient
3. 验证VSCode插件版本
确保VSCode的Go插件为最新版本,旧版本可能存在远程调试的兼容性bug,在扩展市场搜索Go并点击更新。
4. 检查Linux端防火墙
Linux端防火墙要允许2345端口的入站连接,可临时关闭测试:
sudo iptables -F sudo systemctl stop firewalld
如果测试有效,再永久开放端口:
sudo firewall-cmd --add-port=2345/tcp --permanent sudo firewall-cmd --reload
内容的提问来源于stack exchange,提问作者user63898
相关产品推荐
相关产品推荐

