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