Ответ 1
Я сам нашел ответ.
Проблема заключалась в настройке Virtualbox.
В настройках сети была перенаправлена порция для порта 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
Я пытался убить процесс, который использует этот порт... и, к моему удивлению, это была виртуальная машина, к которой я пытался подключиться.
Что я пропустил в этой конфигурации?
Я сам нашел ответ.
Проблема заключалась в настройке Virtualbox.
В настройках сети была перенаправлена порция для порта 9000, которая заблокировала мой отладчик от локального запуска. После удаления он работал без проблем.
Порт 9000 часто используется по умолчанию для конфигураций других приложений (например, native apache на MacOsX), а также виртуальных машин, контейнеров Docker и т.д....
Надежным решением будет - использовать другой порт. Например, 9001 :)
Это означает:
добавив к вашей php.ini(xdebug.ini) строку
xdebug.remote_port=9001
Кроме того, вы можете проверить использование вашего порта 9000 на каком-то инструменте, таком как telnet
В 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 без конфликта.
Это решило это для меня.
Вы пытаетесь выполнить операцию launch
в вашем launch.json
, что приведет к тому, что vscode попытается запустить новый экземпляр php с xdebug на порте 9000.
Попробуйте заменить конфигурацию launch
конфигурацией attach
.
Надеюсь, поможет.
в моем случае сервер sonarqube работал на 9000, поэтому я установил xdebug на 9002.