【问题标题】:XDebug on port 9000 with a virtual machine - EADDRINUSE :::9000使用虚拟机在端口 9000 上进行 XDebug - EADDRINUSE :::9000
【发布时间】:2018-11-11 16:03:30
【问题描述】:

我在 VirtualBox VM 上运行我的 Symfony 应用程序。 PHP 使用 XDebug 运行,并且配置正确。我知道这一点是因为其他人已经设法使其与同一 VM 的快照一起工作。

当我尝试在 VS Code XDebug 中配置时,我使用以下launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

但是当我点击“开始调试:监听 XDebug”时,我得到以下错误:

错误:监听 EADDRINUSE :::9000

我试图杀死正在使用该端口的进程...令我惊讶的是我试图连接的虚拟机。

我在这个配置中遗漏了什么?

【问题讨论】:

  • 切换到 9001 端口或其他一些空闲端口(在 php.ini 和您的编辑器中)。除此之外-该端口已被另一个应用程序使用(如您所说的VirtualBox)..所以您必须先配置该端口...因为VSC无法开始侦听该端口,
  • 确实是一个解决方案,但我宁愿不更改虚拟机,因为它来自我们共享的快照。我想知道为什么其他人没有这个问题,而我有。
  • 好吧——你需要调查一下 9000 端口在什么时候被 VirtualBox 占用:使用 netstat 或类似的,看看它会在什么时候被占用;一步步。可能是特定的 VM 实例,也可能是 Docker- 或 php-fpm 相关的;或者它可能是你的自定义设置等。另外,我不知道你在那里使用的是什么虚拟机......

标签: php visual-studio-code virtualbox xdebug


【解决方案1】:

您正尝试在您的launch.json 中执行launch 操作,这将导致vscode 尝试启动 php 的新实例在端口9000 上使用xdebug强>。

尝试用attach 配置替换您的launch 配置。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    端口 9000 经常被其他应用程序(例如 MacOsX 上的本机 apache)、VM、Docker 容器等的默认配置使用...

    一个可靠的解决方案是 - 使用不同的端口。例如,9001 :)

    这意味着:

    • 将 IDE xdebug 配置从端口 9000 更新到 9001;
    • 添加到 你的 php.ini (xdebug.ini) 行

      xdebug.remote_port=9001
      

    另外,您可以通过 telnet 等工具检查 9000 端口的使用情况

    【讨论】:

      【解决方案3】:

      我自己找到了答案。

      问题出在 Virtualbox 的配置上。

      在网络设置中,端口 9000 的端口转发阻止了我的调试器在本地运行。删除后,它可以正常工作。

      【讨论】:

      • 谢谢你,伙计,这么多,我敢说你还救了我,这个问题在网上似乎很少讨论。我对 docker 也有类似的问题,尽管这里似乎还缺少全局主机 xdebug ip 的 docker 配置,或者配置的连接回选项,这两者都可能会阻止该功能。 – FantomX1 17 分钟前删除
      【解决方案4】:

      在 MacOS 上,我们可以使用终端来确定端口 9000 上打开了什么:

      sudo lsof -nP -i4TCP:9000 | grep LISTEN
      

      我们可以使用上面的 sudo 来查看不属于登录帐户的进程。

      例如,当我执行上述操作时,我得到了:

      php-fpm 110 root    6u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
      php-fpm 261 _www    0u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
      php-fpm 262 _www    0u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
      

      然后我们可以用这个命令结束进程:

      sudo kill 110
      

      然后我们将释放端口,这样我们就可以启动 Xdebug 而不会发生冲突。

      这为我解决了。

      【讨论】:

      • 这个 lsof 命令有助于指出由 brew 服务启动的 php-fpm。我无法杀死 -9 他们并且使用 sudo 他们会重新生成。不知道他们来自哪里,也许是安装代客。我卸载了。
      【解决方案5】:

      在我的例子中,sonarqube 服务器在 9000 上运行,所以我将 xdebug 设置为 9002。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多