You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NAT网络虚拟机下Xdebug无法连接VSCode调试器故障排查求助

故障根因

你当前的故障核心是VSCode调试端配置错误,你对Xdebug连接逻辑的理解是正确的:Xdebug运行在虚拟机侧,会主动发起连接到宿主机的调试客户端,因此需要宿主机的VSCode监听自身对应端口,而非监听虚拟机IP。


解决步骤

1. 修正VSCode的launch.json配置

删除Listen for Xdebug配置项中的"hostname": "192.168.122.78"配置,192.168.122.78是虚拟机IP,不属于宿主机,VSCode尝试监听不属于本机的IP就会抛出EADDRNOTAVAIL错误。
你可以选择删除该行默认监听所有地址,或者显式配置为宿主机在NAT网段的IP192.168.122.1,修改后的配置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/var/www/clients/client1/web4/web": "${workspaceRoot}"   
              }
        },
        // 剩余原有配置保持不变即可
    ]
}

2. 验证宿主机端口监听状态

重启VSCode调试后,在宿主机执行对应命令确认9003端口已经正常监听:

  • Linux宿主机:ss -tulnp | grep 9003
  • Windows宿主机:netstat -ano | findstr 9003
    正常返回结果中可以看到VSCode对应的进程占用9003端口。

3. 验证虚拟机到宿主机的端口连通性

你之前的telnet测试方向错误:需要从虚拟机侧发起对宿主机9003端口的访问,而非宿主机访问虚拟机端口。在虚拟机内执行以下命令测试连通性:
telnet 192.168.122.1 9003
如果连接失败,检查宿主机的防火墙是否放行9003端口的入站规则,你之前仅清空了虚拟机的iptables规则,宿主机防火墙才是拦截该请求的核心。

4. 可选调试触发优化

如果需要自动触发调试,可以在虚拟机的Xdebug配置中新增一行:
xdebug.start_with_request = yes
也可以安装浏览器Xdebug helper插件,手动触发调试请求。


内容的提问来源于stack exchange,提问作者TeoDema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:45:02