开启VPN后Golang调试器失效,监听地址异常求助(GoLand环境)
开启VPN后,GoLand 2023.1.1中的Golang调试器(dlv)无法正常工作:执行命令明确指定监听127.0.0.1:51782,但实际监听地址变为192.168.1.11:51782,关闭VPN后调试功能恢复正常。相关执行日志如下:
D:\Program Files\go\go1.18.5\bin\go.exe tool test2json -t D:\Program Files\JetBrains\GoLand 2023.1.1\plugins\go-plugin\lib\dlv\windows\dlv.exe --listen=127.0.0.1:51782 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec C:\Users\j'j\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___1server_controller__TestGetGoodsSubTypeNum.test.exe -- -test.v -test.paniconexit0 -test.run ^\QTestGetGoodsSubTypeNum\E$ #gosetup API server listening at: 192.168.1.11:51782 2023-06-28T16:00:27+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
明确设置调试配置的监听地址
打开GoLand的「Run/Debug Configurations」,找到对应的Go测试或应用配置,切换到Debugger标签页,将Listen address手动设置为127.0.0.1:<端口号>,避免使用默认的localhost(VPN环境下localhost可能被解析到非回环地址)。强制dlv绑定回环接口
进入GoLand的「Settings/Preferences」→「Build, Execution, Deployment」→「Debugger」→「Go」,在Additional debug flags中添加--bind=127.0.0.1,强制调试器绑定回环地址,不受VPN路由影响。调整VPN路由规则
检查VPN客户端的路由设置,确保回环地址段(127.0.0.0/8)的流量不被VPN接管。部分VPN默认会路由所有流量,包括本地回环,导致dlv优先选择VPN分配的局域网IP作为监听地址。可在VPN客户端添加例外规则,让127.0.0.0/8段流量直接走本地网卡。重置GoLand调试缓存
删除GoLand缓存目录(C:\Users\<你的用户名>\AppData\Local\JetBrains\GoLand2023.1\caches),重启GoLand后重新配置调试参数,排除缓存导致的配置异常。
内容的提问来源于stack exchange,提问作者lexwangw

