XDebug на порту 9000 с виртуальной машиной - EADDRINUSE: 9000

Я запускаю приложение Symfony на виртуальной машине VirtualBox. PHP работает с XDebug, и он настроен правильно. Я знаю это, потому что другим людям удалось заставить его работать со снимком той же виртуальной машины.

Когда я пытаюсь настроить в 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

Я пытался убить процесс, который использует этот порт... и, к моему удивлению, это была виртуальная машина, к которой я пытался подключиться.

Что я пропустил в этой конфигурации?

Ответ 1

Я сам нашел ответ.

Проблема заключалась в настройке Virtualbox.

В настройках сети была перенаправлена порция для порта 9000, которая заблокировала мой отладчик от локального запуска. После удаления он работал без проблем.

Ответ 2

Порт 9000 часто используется по умолчанию для конфигураций других приложений (например, native apache на MacOsX), а также виртуальных машин, контейнеров Docker и т.д....

Надежным решением будет - использовать другой порт. Например, 9001 :)

Это означает:

  • обновление конфигураций xdebug IDE с порта 9000 до 9001;
  • добавив к вашей php.ini(xdebug.ini) строку

    xdebug.remote_port=9001
    

Кроме того, вы можете проверить использование вашего порта 9000 на каком-то инструменте, таком как telnet

Ответ 3

В 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 без конфликта.

Это решило это для меня.

Ответ 4

Вы пытаетесь выполнить операцию launch в вашем launch.json, что приведет к тому, что vscode попытается запустить новый экземпляр php с xdebug на порте 9000.

Попробуйте заменить конфигурацию launch конфигурацией attach.

Надеюсь, поможет.

Ответ 5

в моем случае сервер sonarqube работал на 9000, поэтому я установил xdebug на 9002.