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

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

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

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

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

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

Читать

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

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

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

Читать

 

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

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



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