Xdebug + PHP-FPM + WSL + VS Code: Настройка за 5 минут

Уже писал гайдик на эту тему, но там я рассказывал о процессе настройки на примере PHP7. Решил обновить информацию, т.к. PHP 8 используется 3я версия xdebug, а также есть нюансы, связанные с определением адреса клиентского хоста.

Проблема

Вы разрабатываете на PHP в WSL (например, Ubuntu), используешь PHP-FPM 8+, и хотите отлаживать код через VS Code.

Решение

Сначала проверим/установим xdebug.

Выяснить можно либо, выполнив файл php с кодом <?php phpinfo(); ?> — и проверить есть ли секция с xdebug. Она большая — и выглядит как то так:

Либо второй вариант — запустить из консоли:

И убедиться, что в выводе есть строка «with Xdebug v3.XXX»

Если xdebug не установлен — давайте установим.

Настроить xdebug.ini

Для fpm конфиг типично лежит вот тут:

Пример содержимого:

После изменений конфы, не забываем про:

IDE KEY

Для VSCODE — ключ указывать не надо, т.к. по умолчанию он не требуется, потому что:

Xdebug теперь сам запускает сессию, если включено xdebug.start_with_request=yes

Большинство IDE (VS Code, PHPStorm) не требуют сравнения IDE Key — они слушают все входящие отладочные сессии.

Узнаём IP хоста из WSL

Может быть проблема с тем, чтобы понять какой хост указать в качестве клиентского (т.е. что писать для xdebug.client_host).

Когда речь идёт о Xdebug в WSL, часто возможны три сценария:

  1. PHP и VS Code оба в WSL127.0.0.1 (localhost).
  2. PHP в WSL, VS Code в Windows (без WSL Remote) → нужен IP Windows-хоста.
  3. Docker в WSL2 → сложнее: host.docker.internal, мосты, порты и т.д.

Чтобы получить адрес в случае 2, попробуйте выполнить:

или иногда:

Перебрав эти варианты, вы скорее всего найдете правильный.

В WSL 2 (начиная с Windows 10 2004+) можно использовать host.docker.internal, но:

  • Это работает только если включён флаг networkingMode: bridged (например, в Docker Desktop)
  • В обычном WSL — лучше использовать IP из ip route

Настройка отладки в VS Code

Нужно создать/проверить .vscode/launch.json:

Там может быть много конфигураций, в примере указана лишь наша «Listen for Xdebug». Здесь надо настроить порт и pathMappings.

Логи

Если xdebug запускается, то он создаёт файл лога, который можно мониторить, и пока идет настройка можно установить уровень логирования в 10 (xdebug.log_level).

Если ip клиента указан не верно, то там будут ошибки вроде: Could not connect to debugging client

Запуск отладки

Нажмите shift+ctrl+D и выберите конфигу «Listen for Xdebug». VS Code начнет слушать порт, ожидая отладочную информацию от xdebug.

Если вы задали точки останова (breakpoints), то при выполнении кода xdebug передаст данные VSCode, и вы сможете начать отладку.

Мало букафф? Читайте есчо !

Настройка xdebug с VS Code при использовании локального сервера на WSL

Февраль 3, 2023 г.

Важно отметить, что настройки будут отличаться для разных версии xdebug, здесь я даю гайд для версий xdebug 3.x. Обновление для PHP 8. Настройка ...

Читать

Как оптимизировать диск, используемый WSL

Октябрь 12, 2024 г.

При удалении файлов на диске, используемом WSL, размер файла ext4.vhdx не уменьшается. Обычно он имеет тенденцию только расти в процессе работы. Как ...

Читать

Как смонтировать папку из WSL образа

Июль 21, 2023 г.

В WSL обычно уже смонтированы все диски системы в папке /mnt, и вы легко получаете нужные файлы из родительской системы windows, хотелось бы иметь и обратную возможность. Рассмотрим как выполнить монтирование файлов wsl в файловую систему windows. ...

Читать

Лишние сетевые интерфейсы в WSL Ubuntu

Февраль 5, 2025 г.

Продолжаю использовать Ubuntu (v22) на WSL 2. Не давно столкнулся с не приятным моментом. Из WSL вдруг перестала быть видимой внешняя сеть, хотя до этого ...

Читать
 

Комментарии к «Xdebug + PHP-FPM + WSL + VS Code: Настройка за 5 минут»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: