Оглавление статьи
- Вводная информация
- Установка Xdebug
- Настройка Xdebug 2
- Xdebug сессия
- Переопределение настроек Xdebug в PHP
- Что дальше
Вводная информация
В прошлой статье мы установили редактор кода VSCode и IDE PhpStorm, подготовили их к работе произведя различную настройку. В этой статье речь пойдет об установке Xdebug который позволит отлаживать PHP код.
Установка Xdebug
Подробная установка Xdebug описана на официальном сайте. Здесь же будет приведен пример касательно дистрибутива Pop!_OS. Чтобы установить Xdebug, наберите в терминале следующую команду.
sudo apt install php-xdebug
Xdebug установится в качестве расширения для PHP. Чтобы проверить успешность установки Xdebug, введем в терминале команду.
php --ini | grep xdebug
В терминале должен отобразиться следующий результат /etc/php/8.1/cli/conf.d/20-xdebug.ini. Это путь до конфигурационного файла Xdebug, его в дальнейшем мы будем настраивать.
Так же для проверки можно ввести команду.
php -v
Примерный результат ответа.
PHP 8.1.2-1ubuntu2.14 (cli)(NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2-1ubuntu2.14, Copyright (c), by Zend Technologies
with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
По умолчанию с установкой PHP устанавливается расширение OPcache для кэширования байт кода. Есть небольшая особенность, связанная с Xdebug и OPcache о которой следует знать.
Если вы хотите использовать Xdebug и OPcache вместе, у вас должна быть строка zend_extension для Xdebug ниже строки для OPcache или файл xdebug.ini должен начинаться с большего числа (т. е. 99-xdebug.ini и 20-opcache.ini), иначе они не будут работать должным образом вместе.
Другими словами конфигурационный файл Xdebug должен быть подключен самым последним, цифры в имени конфигурационных файлах позволят создать надлежащий порядок.
Настройка Xdebug 2
По умолчанию всегда устанавливается крайняя версия Xdebug, поэтому будет установлена версия Xdebug 3. Но если когда нибудь попадется Xdebug 2, то настраивается он следующим образом.
Путь до конфигурационного файла 20-xdebug.ini можно узнать введя команду.
php --ini | grep xdebug
Вводим в терминале команду.
sudo gedit /etc/php/8.1/cli/conf.d/20-xdebug.ini
Откроется файл с настройками, вставим в него следующее содержимое.
# Подключение модуля
zend_extension=xdebug.so
# develop режим для var_dump, debug для использования точек останова
xdebug.remote_enable=1
# Отладка для каждого запроса
xdebug.remote_autostart=1
# Обработчик отладки
xdebug.remote_handler="dbgp"
# Отключить подключение клиента по http
xdebug.remote_connect_back=0
# Хост к которому подключаемся
xdebug.remote_host=localhost
# Порт
xdebug.remote_port=9003
#IDE
xdebug.idekey=PHPSTORM
# Log
xdebug.remote_log=/var/log/xdebug/xdebug.log
# Если этот параметр равен 1, Xdebug отключит оператор @ (игнорирование ошибок в php)
xdebug.scream=1
# Статистика
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1 # для GET ?XDEBUG_PROFILE
xdebug.profiler_output_dir = "путь до каталога где будет храниться статистика"
Настройка Xdebug 3
Xdebug 3 более предпочтительная и современная версия которую следует использовать.
Путь до конфигурационного файла 20-xdebug.ini можно узнать введя команду.
php --ini | grep xdebug
Вводим в терминале команду.
sudo gedit /etc/php/8.1/cli/conf.d/20-xdebug.ini
Откроется файл с настройками, вставим в него следующее содержимое.
# Подключение модуля
zend_extension=xdebug.so
# develop режим для var_dump, debug для использования точек останова
xdebug.mode=develop,debug
# Отладка для каждого запроса
xdebug.start_with_request=yes | trigger #- для GET ?XDEBUG_PROFILE
# Отключить подключение клиента по http
xdebug.discover_client_host=0
# Хост к которому подключаемся
xdebug.client_host=localhost
# Порт
xdebug.client_port=9003
#IDE
xdebug.idekey=PHPSTORM
# Log
xdebug.log=/var/log/xdebug/xdebug.log
# Если этот параметр равен 1, Xdebug отключит оператор @ (закрытие)
xdebug.scream=1
# Статистика
xdebug.mode = profile
xdebug.output_dir=/var/log/xdebug
# С разумными пределами
xdebug.var_display_max_depth = 10
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024
# Без ограничений
# (максимальная вложенность 1024)
# xdebug.var_display_max_depth = -1
# xdebug.var_display_max_children = -1
# xdebug.var_display_max_data = -1
Xdebug сессия
Обратите внимание на строку xdebug.idekey=PHPSTORM с помощью этого ключа Xdebug будет связываться с IDE PhpStorm. В контексте редактора кода VSCode данный параметр должен иметь следующий вид xdebug.idekey=VSCode.
Так же к настроенному параметру xdebug.idekey следует добавить переменную с названием программы которую вы намереваетесь использовать, для этого в терминале вводим.
export XDEBUG_SESSION=PHPSTORM
# Или
export XDEBUG_SESSION=VSCode
Переопределение настроек Xdebug в PHP
Так же некоторые настройки могут быть переопределю в PHP коде, например.
ini_set('xdebug.var_display_max_depth', 10);
ini_set('xdebug.var_display_max_children', 256);
ini_set('xdebug.var_display_max_data', 1024);
Настройка логов
Для того чтобы отслеживать работу Xdebug, необходимо настроить логирование. Именно логи подскажут причину ошибки если вдруг Xdebug у нас не запустится.
Откроем терминал и введем поочереди команды, который создадут файл хранящий логи и дадут ему соответствующие права на чтение/запись.
sudo mkdir /var/log/xdebug
sudo touch /var/log/xdebug/xdebug.log
sudo chown -R www-data:www-data /var/log/xdebug
sudo chmod -R 775 /var/log/xdebug
sudo chmod 664 /var/log/xdebug/xdebug.log
Установка расширения Xdebug helper в браузер
Следующим шагом в настройке Xbedug будет установка расширения Xdebug helper в браузер. Оно позволит связать страницу сайта в браузере с его кодом в VSCode или PhpStorm.
Переходим на официальную страницу расширения и устанавливаем его.
В настройках расширения Xdebug helper устанавливаем параметр IDE key в PHPSTORM либо VSCode. Затем активируем плагин, включив пункт Debug.
Что дальше
Мы проделали большую работу по настройке Xdebug. Остается лишь настроить непосредственно программы PhpStorm или VSCode.