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, и вы сможете начать отладку.

Написать комментарий

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

Перенос Ubuntu WSL на другой диск

Март 6, 2022 г.

В WIN 10 возможно установить в качестве подсистемы Linux - Ubuntu. Установка доступна в Microsoft Shop, и в настоящий момент на выбор имеются 18я и 20я ...

Читать

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

Июль 21, 2023 г.

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

Читать

 

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

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



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