Xdebug - настройка на сервере и в IDE

Общий принцип работы такой, при установленном, включенном и настроенном расширении php "xdebug" сервер передает данные по ходу интерпритации на клиент (IDE), которая в момент прохода установленного breakpoint отвечает сервер об остановке интерпритации для ознакомления с серверными данными.

Клиент

На клиенте нужно настроить и включить режим отладки, а так же установить breakpoint`ы в нужных для отладки местах.

IDE - VSCode

Устанавливаем официальное расширение xdebug.php-debug и создаем для него конфиг в корне проекта:


mkdir .vscode
nano .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/var/www/PROJECT_DIR": "${workspaceFolder}"
            }
        }
    ]
}

IDE - PHPStorm

Будьте внимательный к путям (локальный - удаленный), их маппинг, открытый порт 9003, разрешения и отсутствие фильтров


File → Settings → PHP → Debug # проверяем настройки Xdebug (разрешения, фильтры, порты)

Tools → Deployment → Configuration # настраиваем соединение и маппинг

File → Settings → PHP → Servers # настраиваем "use path mapping", внимательно с путями!

Run → Debug → Edit Configuration → Add new → PHP Remote Debug # можно оставить все по умолчанию

Ctrl+F8 # поставить breakpoint  в коде
Shift+F9 # включить прослушывание дебага

Сервер

На сервере должно быть установлено и включено расширение xdebug, проверить это можно с помощь функции phpinfo();

Удаленный стейдж на докере


# редактирование конфига
docker exec -it -u root CONTAINER_NAME nano /usr/local/etc/php/conf.d/xdebug.ini 

[xdebug]
xdebug.mode = debug
xdebug.client_port = 9003 ; your ide port
xdebug.client_host = 10.10.10.1 ; your ide ip address
xdebug.start_with_request = "trigger" ; "trigger" should be transfered or "yes" for every time (no recommend)
xdebug.trigger_value = RUN ; XDEBUG_TRIGGER=RUN should be set as env or get or post or cookie


docker kill -sUSR2 CONTAINER_NAME # релоад фпм
docker exec -t CONTAINER_NAME php-fpm -i | grep xdebug # сверка фпм конфига
docker logs CONTAINER_NAME -f # монитор лога нонстоп

Локальный сервер на нативном Docker


nano docker-compose.yml
      - ./docker/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
[xdebug]
xdebug.mode = debug
xdebug.client_port = 9003
xdebug.client_host=172.17.0.1
xdebug.start_with_request = yes

nano Dockerfile-php
RUN pecl install xdebug && docker-php-ext-enable xdebug

Сервер на Laradock


nano laradock/.env
PHP_FPM_INSTALL_XDEBUG=true
PHP_FPM_XDEBUG_REMOTE_PORT=9003

; show docker host IP (172.17.0.1)
ip addr show docker0

nano laradock/php-fpm/xdebug.ini
[xdebug]
xdebug.mode = debug
xdebug.client_port = 9003
xdebug.client_host=172.17.0.1
xdebug.start_with_request = yes

docker compose build php-fpm
docker compose down php-fpm
docker compose up -d php-fpm

назад