Как настроить отладчик Xdebug в PhpStorm для проекта, работающего в VirtualBox
Настройка отладчика в PhpStorm для проекта, работающего в VirtualBox (в данном случае мы используем Vagrant и Homestead в Windows 11 для проекта Laravel), включает настройку как серверной, так и клиентской стороны (PhpStorm) для отладки. В основном этот процесс включает в себя настройку Xdebug на вашей виртуальной машине, а затем настройку PhpStorm для связи с ним.
Вот пошаговые инструкции:
Установка и настройка Xdebug на сервере VirtualBox (Homestead)
- SSH в ваш Vagrant:
vagrant ssh - Установите Xdebug:
sudo apt-get install php-xdebug - Обновите конфигурацию Xdebug. Откройте файл конфигурации Xdebug в редакторе, например `nano`:
sudo nano /etc/php/8.1/mods-available/xdebug.ini
Затем добавьте или измените описанную конфигурацию:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.discover_client_host = true
xdebug.start_with_request=yes
xdebug.log=/var/log/xdebug.log
Путь к этому файлу может отличаться в зависимости от конфигурации вашего сервера и версии PHP.
Чтобы найти файл конфигурации Xdebug, вам необходимо:
sudo find /etc/php -name '*xdebug*'
Эта команда должна вывести список всех файлов и каталогов, содержащих слово «xdebug» внутри `/etc/php`. Найдите в результатах файл `.ini`. Если вы его видите, скорее всего, это ваш файл конфигурации Xdebug. Обратите внимание на его путь.
Если вы не видите ни одного файла `.ini` для Xdebug, возможно, он неправильно установлен или связан. В таком случае вам может потребоваться переустановить Xdebug или убедиться, что он включен.
Для типичной настройки веб-разработки с Vagrant и Homestead с использованием nginx или Apache вы, скорее всего, используете PHP-FPM. Поэтому вам следует изменить файл, связанный с FPM:
/etc/php/8.1/fpm/conf.d/20-xdebug.ini
Однако имейте в виду, что если этот 20-xdebug.ini является символической ссылкой на /etc/php/8.1/mods-available/xdebug.ini (что весьма вероятно), то обновление любого из них повлияет на все контексты (CGI, PHPDBG и FPM). Таким образом, если вы измените файл mods-available/xdebug.ini, это изменит настройки для всех остальных, при условии, что они являются символическими ссылками.
Чтобы определить, является ли файл символической ссылкой, вы можете использовать Команда ls с опцией -l:
ls -l /etc/php/8.1/fpm/conf.d/20-xdebug.ini - Перезапустите службу PHP:
sudo service --status-all | grep php | awk '{print $4}' | xargs -I {} sudo service {} restart
Настроить PhpStorm
- Откройте PhpStorm.
- Перейдите в «Файл» > `Настройки` (или `PhpStorm` > `Настройки` в macOS).
- Выберите PHP.
- Нажмите кнопку `...` рядом с интерпретатором CLI. Здесь вы можете настроить удаленного переводчика, если вы еще этого не сделали. Это гарантирует, что PhpStorm будет знать об исполняемом файле PHP и конфигурации внутри поля Vagrant.
- Все еще в настройках выберите `PHP` > `Серверы`.
- Нажмите кнопку `+`, чтобы добавить новый сервер:
- Имя: любое имя, например `MyProject`
- Хост: `myproject.test`
- Порт: `80`
- Отладчик: `Xdebug`
- Использовать сопоставления путей:
- Сопоставьте каталог на вашем локальном компьютере с каталогом в вашем поле Vagrant.
Например, если ваш проект находится в `c:\dev\my_project` на вашем хост-компьютере и в `/home/vagrant/code/my_project` в поле Vagrant установите это сопоставление.
- Выберите `PHP` > `Debug`
Убедитесь, что для `Debug port` установлено значение `9003` (или любой другой порт, который вы установили в конфигурации Xdebug). - Нажмите «Применить», а затем «ОК».
Начало сеанса отладки
- Установите точку останова в PhpStorm, щелкнув поле рядом со строкой кода.
- Убедитесь, что в правом верхнем углу PhpStorm активен значок телефона (прослушивание отладочных соединений) (он должен быть зеленым).
- В браузере перейдите к веб-приложению, которое вы используете в своем ящике Vagrant.
- Если все настроено правильно, то при нажатии на строку с точкой останова PhpStorm должен выделить эту строку и позволить вам проверять переменные, пошагово выполнять код и т. д.
- Удачной отладки!
Помните, что иногда конфигурации или пути могут незначительно отличаться в зависимости от используемой вами версии программного обеспечения, поэтому всегда обращайтесь к документации, если у вас возникнут какие-либо проблемы.
Профилирование с Xdebug
Xdebug представляет собой мощный инструмент для отладки и профилирования PHP-кода. Чтобы измерить время выполнения блока кода с его помощью, активируйте функцию профилирования, добавив или модифицировав следующие настройки в файле 20-xdebug.ini:
xdebug.mode = profile
xdebug.start_with_request = trigger
xdebug.output_dir = /home/vagrant/code
В указанной последней строке путь ведёт к общей папке проектов на виртуальной машине, что позволяет немедленно получить доступ к файлам профилирования из Windows.
Активация профилирования
Для запуска профилирования, запросите страницу, передав параметр XDEBUG_PROFILE. Например: http://yourdomain.com/yourscript.php?XDEBUG_PROFILE=1. При этом Xdebug создаст файл профилирования.
Для профилирования конкретного блока кода используйте функции xdebug_start_profiling() и xdebug_stop_profiling() на начале и конце блока соответственно.
Анализ результатов
После завершения выполнения кода в заданной директории (xdebug.output_dir) появится файл профилирования с расширением .cachegrind. Для его анализа без PhpStorm рекомендуется использовать KCacheGrind (Linux) или QCacheGrind (Windows, macOS). Внутри этих программ вы сможете анализировать время выполнения каждой функции.
В PhpStorm данный файл можно открыть через "Tools" > "Analyze Xdebug Profiler Snapshot". После загрузки файла профилирования в PhpStorm будет предоставлена детализированная информация о времени и памяти, затраченной на выполнение каждой функции.
На основе полученных данных вы сможете определить узкие места в коде и произвести необходимую оптимизацию.
Помните: профилирование может замедлить ваш код, поэтому не используйте его постоянно на продакшн-сервере или в обычном режиме работы приложения.
Решение проблем с Xdebug
Часто бывает так, что, следуя проверенной инструкции, вы не получаете ожидаемого результата. Причин может быть множество, и, к сожалению, не все из них легко учесть. Ниже приведены типичные проблемы и способы их решения в контексте использования Xdebug:
- Xdebug установлен, но не активен на сервере: Если команда php -m | grep xdebug не возвращает результат, убедитесь, что вы настроили Xdebug для нужной версии PHP. Напоминаю, что разные проекты могут использовать разные версии PHP, и потребуется настроить Xdebug для каждой из них.
- Использование функции xdebug_info(): Если вы столкнулись с проблемами, попробуйте вызвать PHP-функцию xdebug_info(). Она покажет актуальную информацию о настройках Xdebug и поможет убедиться в их корректности.
- Xdebug активен, но phpStorm не реагирует: Если Xdebug работает на сервере, но phpStorm не получает сигналов, возможная причина может крыться в вашем брандмауэре или файрволе. Проверьте правила входящих и исходящих соединений. В моем случае проблема заключалась именно в этом: сначала всё работало корректно, но позже связь внезапно прервалась.
- Режим профилирования: Если Xdebug настроен в режиме профилирования, обратите внимание, что отладка кода при этом не будет производиться.
Помните, что инструменты и системы постоянно развиваются, поэтому при возникновении проблем всегда стоит обращаться к актуальной документации и сообществу разработчиков.