отладка php кода в phpstorm
Отладка PHP 8 с помощью Xdebug 3 в PHPStorm
В этом уроке мы проведем полную настройку дебаггера для PHP8 в связке с PhpStorm. Для PHP7 используйте инструкцию по настройке XDebug для PHP7.
Отладка программы – это процесс, в ходе которого обнаруживают и устраняют баги. Для этого нам нужно знать, например, значения переменных на каждом шаге выполнения программы, или смотреть выполнилось ли условие, или даже погружаться в работу рекурсивных функций.
Собственно, так как многим рекурсия показалась сложной, то я решил сделать урок по отладке кода на PHP 8. В этой статье мы рассмотрим настройку отладки с помощью PHP-расширения Xdebug, а производить отладку мы будем в уже известной нам IDE PHPStorm.
Настройка отладки PHP 8 в OpenServer
И раскомментируйте её, убрав ; в начале строки, чтобы получилось вот так:
Затем находим секцию [xdebug]
Здесь нам нужно раскомментировать/изменить значения параметров на следующие:
После этого сохраните файл (CTRL + S) и перезапустите веб-сервер.
На этом настройка веб-сервера для отладки завершена.
Настройка отладки в PHPStorm
В секции Xdebug задаём следующие настройки:
Теперь в верхнем правом углу PhpStorm находим кнопку Add configuration
В появившемся окне жмем на плюсик и выбираем пункт PHP Remote Debug.
В поле Name пишем XDebug.
Ставим галочку напротив пункта «Filter debug connection by IDE key». В поле IDE key пишем «PHPSTORM». Напротив пункта Server нажимаем на три точки. При помощи плюсика добавляем новый сервер. Заполняем поля как на скриншоте ниже:
Жмём ОК и выбираем только что добавленный сервер. Должно получиться так:
После чего снова жмём ОК.
Настройка расширения Xdebug helper
Далее заходим в магазин расширений Google Chrome, находим расширение XDebug helper и устанавливаем его.
В правом верхнем углу Google Chrome находим иконку с паззлом, жмем на нее, и напротив XDebug helper жмём на три точки. Выбираем пункт «Параметры».
В секции IDE key выбираем PhpStorm и обязательно! жмём кнопку Save.
Жмём на паззл ещё раз, и напротив пункта Xdebug helper жмём кнопку для закрепления плагина на панели.
Начинаем отлаживать
Итак, все настройки выполнены и дело осталось за малым – начать пользоваться отладчиком.
Вернёмся снова в IDE, в нашем index.php запишем следующий код:
Это брэйкпоинт (breakpoint), или, как её ещё называют – точка останова. К ней мы вернёмся чуть позже.
В правом верхнем углу PhpStorm напротив выбранной конфигурации XDebug нажимаем на значок зеленого жучка. На нём загорится точка. Внизу IDE появится консоль.
Нажмем правой кнопкой мыши на вкладке Console и уберем галочку «Focus on startup».
И переходим во вкладку Debugger.
Теперь возвращаемся во вкладку браузера с нашим открытым проектом, жмём на иконку плагина Xdebug helper (жучок), выбираем пункт Debug.
После чего значок станет зелёным.
Теперь можно в Chrome обновить страницу, и увидеть, что она повисла в режиме загрузки.
А в окне PHPStorm увидеть следующее:
Наша программа остановила своё выполнение в месте брэйкпоинта.
Давайте нажмём кнопку “F8”. Она осуществляет выполнение кода на текущей строке и останавливается перед следующим действием.
Помимо этого, есть, разумеется, и другие сочетания клавиш, которые используются во время отладки.
Давайте прямо сейчас нажмём F9. Это приведет к тому, что программа продолжит выполнение до следующего брэйкпоинта (да, их можно наставить сколько угодно). Если их больше не встретится (как в нашем примере), то программа просто завершит свою работу.
Давайте поиграемся с кодом посложнее:
И установим два брэйкпоинта на строках 5 и 10.
После чего обновим нашу страничку в браузере и попадём в первый брэйкпоинт на строке 10:
Помимо этого, в левом нижнем углу есть окошечко “Frames”, это так назваемый “стек вызовов”. Здесь мы можем переключаться на места, откуда был вызван наш код ранее. Так мы можем переключиться в то место, где была вызвана функция getSum().
И можем посмотреть переменные, которые были доступны в той области видимости (уровнем выше).
Отлично, осталось рассмотреть ещё одну клавишу и вы готовы к бою – F7. Она позволяет зайти “внутрь” какой-либо конструкции.
Давайте закончим отладку нажатием F9. Поставим теперь только один брэйкпоинт на строке номер 15 и обновим страничку в браузере.
Если сейчас нажать F8, то программа закончит своё выполнение, и мы не попадём внутрь функций. Так происходит потому что во время отладки мы работаем на определённых уровнях вложенности, и если нам нужно будет попасть внутрь функции, то нужно будет нажать F7, находясь на строке 15. После этого мы окажемся на строке 10. Если сейчас нажать F8, попадём на строку 11. Ещё раз – на строку 12. Если мы сейчас, находясь на 12 строке нажмем F7, то попадём внутрь функции getSum() на строку 5. А если бы мы нажали F8, то мы просто поднялись бы на уровень выше, в то место, где была вызвана функция getSumOfCos().
В принципе, большего для отладки вам не потребуется (лично мне этого хватает).
Ну а сейчас пришла пора поотлаживать рекурсивные функции. Коль уж у вас возникли проблемы с прошлой домашкой – давайте их решать =)
Давайте возьмем и поковыряем код из предыдущей домашки:
Поставим брэйкпоинт на 3 строке и запустим программу.
Жмём F8 и попадаем на строку 5. Сейчас функция завершит свою работу и мы попадём на уровень выше, в то место, где она была вызвана. Итак, жмём F8.
Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс
В этой статье я расскажу как удобно осуществлять отладку кода в PhpStorm на примере работы с веб-сайтом, работающем в системе 1C-Битрикс. Работать будем с IDE PhpStorm и отладчиком XDebug. Я предполагаю, что на вашем сервере уже установлен XDebug и у вас уже создан проект в PhpStorm.
Во время разработки часто приходится использовать функции типа print_r() или echo для вывода данных на экран. Я сам лично до недавнего времени использовал функции типа:
Эта функция печатала массив на экран и уже в таком виде я его разбирал и вносил в код правки. Но что же делать, если принт огромного $arResult на странице недопустим? Что если на сайте уже есть посетители и выводить системную информацию категорически нельзя (для удаленного дебага будет полезна статья)? Тогда появляются еще более интересные функции типа:
Такая функция выводит принты на экран только для администраторов сайта, что частично решало возникшую проблему, но удобство использования такого решения оставляют желать лучшего.
XDebug и PhpStorm
Эти два продукта дают нам возможность отказаться от вышеописанных функций да и вообще вывода переменных на экран при отладке приложения и получать данные прямо в IDE в удобном и читаемом виде:
Выше на скриншоте мы можем наблюдать объект $APPLICATION в окне дебага файла /index.php. Мы получили полную информацию об объекте, в сгруппированном виде, при этом мы можем наблюдать тип данных каждого элемента в объекте. И (внимание!) мы при этом нигде не писали ни каких var_dump() или print_r()!
Настройка PhpStorm для отладки с помощью XDebug
Перед тем как начать пользоваться такой прелестью нам нужно совершить несколько действий:
1. Настроить XDebug на сервере
Первым делом мы должны убедиться, что на серевере установлен XDebug. В данной статье я не буду рассматривать процесс установки XDebug на сервере, об этом есть много статей в интернете. Лишь покажу что нужно было сделать в MAMP, чтоб активировать XDebug:
Все действия совершались с файлом php.ini для сборки PHP версии 5.5.3. Как добраться к этому файлу в MAMP — ниже на скриншоте
В этом файле нужно раскоммертировать строку
zend_extension=»/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so»
и дописать строку
xdebug.remote_enable=1
После этого phpinfo() выдаст нам такую информацию:
XDebug готов к работе.
2. Настроить PhpStorm
Нажимаем на плюс, чтоб добавить новую настройку для дебага.
Выбираем настройку Php Web Application
Тут нужно настроить инструмент с помощью которого осуществляется дебаг, нажимаем на кнопку рядом с настройкой сервера:
Нажимаем на плюс, заполняем имя, хост сайта и нажимаем на Validate remote environment.
Там выбираем из списка тот сервер, который настраивали выше и нажимаем Validate
Если валидация прошла успешно, то мы готовы к дебагу. Применяем все сохраненные настройки и возвращаемся в редактор.
3. Расстановка брейкпоинтов (breakpoints)
Чтоб узнать значения переменных в текущем коде, нужно сообщить нашей IDE в каком именно месте кода мы хотим получить нужные нам значения. Для этого предусмотрен функционал брейкпоинтов. Выбираем нужную строку php-кода и нажимаем на область справа от номера строки.
4. Запуск дебага
Далее нужно включить прослушивание 9000 порта, на который XDebug будет посылать ответ при запуске скрипта, и нажать на зеленого жука слева (расположений кнопок в windows версии PhpStorm может отличаться).
После нажатия на жука у нас должен открыться браузер
и через несколько секунд снова откроется PhpStorm с дебаг-панелью, где будут значения всех переменных на момент обработки кода месте брейкпоинта
Отладка с помощью XDebug и PhpStorm (дополнение)
Доброго времени суток, %username%!
Прочитал сегодня статью «Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс». В ней автор использует «зеленого жука» для запуска отладки. В комментариях предложены еще несколько методов запуска отладки, такие как специальные закладки, различные плагины и т.д. На мой взгляд, все это неудобно, к тому же есть наиболее простой и удобный вариант. Я мог бы предложить его в комментариях к статье, но, увы, в read-only это невозможно. Посему вынужден писать отдельную статью.
У xdebug есть возможность автостарта, без всяких премудростей. Достаточно просто расставить breakpoint’ы и открыть Ваше приложение в браузере, xdebug будет подхватывать старт сам.
1. Настройка XDebug
В php.ini подключаем расширение и устанавливаем параметры:
2. Настройка PhpStorm
Настраиваем интерпретатор, если у вас это еще не сделано.
Далее добавляете сервер, если вы сервер локальный, то пишете в поле Host — localhost, если удаленный то адрес удаленного хоста. Имя хоста здесь и в php.ini должно совпадать.
Настраиваем XDebug. Порт берем из php.ini (xdebug.remote_port). Если вам не нужно чтобы XDebug останавливался на первой строчке приложения, отключаем два нижних чекбокса.
На этом настройка завершена, можно пользоваться.
Использование
Для начала работы расставляете breakpoint’ы, включаете прослушку порта XDebug и открываете ваше приложение.
Breakpoint’ы будут ловиться автоматически, без необходимости тыкать в «зеленого жука». Надеюсь информация кому-нибудь пригодится.
Debug a PHP CLI script
PHP applications are not always web applications. Various command line tools, daemons, message queue processing applications and other types of applications typically run in the PHP CLI. There are several ways to start a PHP CLI debugging session. You can start it from within PhpStorm and make it start the script and attach the debugger to it. Alternatively, you can let PhpStorm listen for incoming debugger connections and start the script outside the IDE. We’ll take a look at both options.
Before you start debugging, make sure that you have a debugging engine installed and configured properly. PhpStorm supports debugging with two most popular tools: Xdebug and Zend Debugger. These tools cannot be used simultaneously because they block each other. To avoid this problem, you need to update the corresponding sections in the php.ini file as described in Configure Xdebug and Configure Zend Debugger.
Open the active php.ini file in the editor:
Start a debugging session from PhpStorm
To start debugging a PHP CLI script from within PhpStorm, perform the following steps.
Create a Run/Debug Configuration
PhpStorm uses Run/Debug configurations to execute a script from within the IDE. A configuration can define additional arguments for the PHP interpreter as well as launch other commands prior to starting our script. We will need a Run/Debug configuration to start the debugger from within PhpStorm.
Create a Run/Debug configuration for a PHP script manually
Create a new Run/Debug configuration using the Run | Edit Configurations menu.
Add a new configuration of the PHP Script type and provide the required parameters, such as the script to be executed.
Save the created Run/Debug configuration.
Generate a Run/Debug configuration for a PHP script
Right-click in the Project tool window, and select Debug |
Отладка php кода в phpstorm
На данный момент, PhpStorm – одна из лучших IDE для разработки на языке PHP, которая предоставляет множество возможностей для разработчика, такие как запуск PHP-скриптов, благодаря возможности подключения внешнего интерпретатора PHP и отладку через расширение Xdebug.
В этой статье мы рассмотрим возможность подключения интерпретатора PHP, отладчика Xdebug к PhpStorm и использование встроенного в IDE web-сервера.
Начнем с установки отладчика Xdebug в PHP.
Установка Xdebug
Первым делом скачаем и установим сам интерпретатор PHP по ссылке: http://php.net/downloads.php
Далее нужно произвести начальную настройку PHP и прописать в переменную окружения PATH путь к интерпретатору. Чтобы не повторяться, весь необходимый порядок действий мной описан в этой статье: Установка Composer и снятие ограничения количества обращений к GitHub
Теперь можно перейти к установке отладчика Xdebug, для которого существует специальный помощник, значительно упрощающий процедуру установки. Для его использования перейдем по ссылке: https://xdebug.org/wizard.php
На этой странице, необходимо ввести в поле ввода информацию об установленном PHP-интерпретаторе, которая генерируется с помощью PHP-функции phpinfo(). Вводить нужно весь скопированный текст со страницы.
Копируем полученную информацию, нажимаем кнопку Analyse my phpinfo() output и получаем инструкцию по установке Xdebug.
В зависимости от вашей версии PHP и пути установки инструкция может отличаться от моей:
Подключение интерпретатора PHP к PhpStorm
Теперь перейдем в PhpStorm и откроем настройки комбинацией клавиш Ctrl+Alt+S.
Далее, в секции Languages & Frameworks выберем пункт PHP. В этой секции необходимо назначить интерпретатор для IDE в пункте Interpreter нажав на кнопку …
В открывшемся окне, в поле Name вводим любое имя для удобства дальнейшей идентификации, например: PHP 5.6.11.
В поле PHP executable указываем путь до интерпретатора, например: C:\php\php.exe. Обратите внимание на появившуюся версию PHP и дебагера, что свидетельствует о правильности установки.
Чтобы убедиться в том, что правильно отрабатывает подключенный интерпретатор PHP, создадим в PhpStorm новый проект, добавим к нему файл index.php и запишем в этот файл, например, функцию var_dump([ 1, 2, 3 ]) с переданным в неё массивом.
На странице мы видим характерный вывод var_dump(), который генерируется с помощью Xdebug. И, если посмотреть на заголовки ответа через консоль разработчика, то мы увидим, что всё работает верно:
Начальная настройка Xdebug и установка его под линукс описана в статье Установка модуля Xdebug для PHP под Ubuntu Linux
Работа с отладчиком Xdebug в PhpStorm
Прежде чем приступит к отладке PHP-скриптов с помощью Xdebug произведем необходимую настройку в файле php.ini. В секции Dynamic Extensions после подключения расширения Xdebug добавим следующие настройки:
Чтобы проверить, что все действия были проведены верно, добавим в уже имеющийся в проекте файл index.php следующий код:
И поставим точку остановки на переменной $arr.
Теперь запустим отладку этого скрипта, нажав правую кнопку мыши и выбрав пункт Debug ‘index.php’. Если все было сделано правильно, то в PhpStorm появится вывод дебага, как показано на скриншоте.
В итоге, мы получили мощный и удобный инструмент для отладки PHP-скриптов с подключенным интерпретатором PHP, а также возможность запускать скрипты через встроенный в PhpStorm локальный web-сервер.