Отладка PHP кода в PhpStorm с использованием Xdebug
Основным преимуществом использования PhpStorm вместо блокнота при написании кода является возможность использования отладчика (или "дебаггера"). Отладчик позволяет проникнуть внутрь кода для отслеживания изменения переменных и анализа логики его работы на различных этапах исполнения скрипта или движка, в нашем случае - Drupal.
Скажу честно, что я начал активно использовать дебаггер только спустя полутора лет web-разработки. Да, я считал, что надо "писать код бляць" и не отвлекаться на изучение каких-то непонятных дебаггеров. Но в конечном счете мне пришлось столкнуться с серьезной командной разработкой, где без использования отладчика делать было нечего. Поэтому мой вам совет: потратьте один, да хоть и два дня, но разберитесь в тонкостях работы с PHP отладчиком. Ну а я вам в этом постараюсь помочь.
В рамках этой статьи будет рассмотрена связка OpenServer, Xdebug (по умолчанию идет с OpenServer) и PhpStorm - про первичную настройку среды разработки я уже писал, рекомендую начать с нее. Также нам потребуется уже созданный локальный сайт и проект в PhpStorm – у меня это будет www.angarsky.loc.
Конфигурация отладчика в PhpStorm
Настраивать отладчик мы будем на примере index.php – начинайте настройку именно с этой страницы, т.к. при запуске движков она обязательно отрабатывает.
В раскрывшемся окне первым делом жмем на значок «+» и выбираем PHP Web Application. Заполняем поле Name, выбираем ваш любимый браузер для разработки и в качестве Start URL указываем страницу сайта для стартового запуска. Обратите внимание, что указывается относительный путь.
Следующим шагом будет конфигурирование Server. Опять же жмем «+», заполняем Name, Host и Use path mappings. Заполняем все по аналогии со следующим скриншотом и жмем «ОК».
Аналогичным нажатием на «ОК» завершаем конфигурацию и PHP Web Application. Если все сделано верно, то можно приступать к пробному запуску. Для этого ставим Breakpoint (по-русски, «точка остановки») и жмем иконку запуска дебаггера.
Если все сделано верно, то вас перебросит в выбранный браузер, где начнет загрузку страница вида:
.http://www.angarsky.loc/?XDEBUG_SESSION_START=10098
Буквально сразу у вас замигает иконка PhpStorm на панели Windows. Переходим в PhpStorm и видим следующую картину.
Теперь более подробно о том, что я отметил маркерами:
- Стек функций, который прошел скрипт до нашего Breakpoint’а.
- Список переменных, доступных в данной функции в данный момент исполнения кода.
- Список переменных для отслеживания. Сюда вы можете перетаскивать все необходимые переменные из второй колонки, значения которых необходимо отследить.
- Кнопка остановки отладчика.
- Кнопки для навигации в коде: переход на следующую строку кода, переход к следующей точке остановки. Однако я рекомендую работать с горячими клавишами – о них чуть ниже.
- Указатель строки текущего состояния отладчика.
Чтобы выйти из состояния отладки нажмите «F9». Можете перейти обратно в браузер и убедиться, что страница сайта загрузилось как обычно. Если обновить страницу, то опять сработает дебаггер – это будет происходить до тех пор, пока вы не отключите процесс отладки.
Управление процессом отладки
Ниже приведены комбинации горячих клавиш, необходимых для быстрой отладки кода:
- F7 – переход к следующему шагу кода, выполняя заход во все встречающиеся функции.
- F8 – переход к следующей строке кода, минуя заход в функции.
- F9 – переход к следующему Breakpoint’у или завершение процесса отладки при их отсутствии.
- Shift + F8 – выход из текущей функции.
Для дальнейшего наглядного примера я поставил Breakpoint в своей кастомной функции, отвечающей за изменение комментариев.
Как вы можете заметить стек функций уже гораздо больший, нежели в первом примере. Теперь небольшое пояснение по горячим клавишам.
Собственно сейчас отладчик находится на строке 15. Если «шагать» по коду, используя клавишу F7, то вы через два шага вы окажетесь в функции
. При использовании клавиши F8 функция drupal_get_path()
будет выполнена в фоне, а вы сразу окажетесь на строке 18. При нажатии комбинации Shift + F8 вы выйдете из текущей функции и окажитесь в drupal_get_path()
на 1222 строке (см. стек функций). Таким образом, для быстрой отладки необходимо владеть всеми этими приемами.theme()
Отладка PHP ошибок
Любой разработчик рано или поздно сталкивается с ошибками в коде. Серьезные ошибки Drupal выводит в сообщениях статуса, предупреждения (PHP warnings) логирует в журнале. Именно для устранения ошибок нам и пригодится отладчик. Для начала выясняем, на каком этапе появляется ошибка (название функции и номер строки) и устанавливаем Breakpoint в данное место. Запускаем отладчик и начинаем поиск ошибки:
- проверяем все переменные, массивы, объекты;
- анализируем их изменение в теле функции;
- переходим на вышестоящие в стеке функции (по клику мыши названию функции в нижнем левом окне по), смотрим, какие данные передаются в текущую функцию;
- расстанавливаем новые Breakpoint’ы, если это необходимо.
Устранение ошибок может занять как от нескольких секунд, так до нескольких часов, особенно, если разработчик слабо знаком с архитектурой Drupal. Навык отладки приходит со временем – я, как бы хотел, не смогу объяснить в рамках данного поста все нюансы. Однако дам несколько советов, которые, возможно, позволят сэкономить несколько минут:
- при установке Breakpoint на массив – размещайте его на строке с первым элементом массива, иначе он не отработает;
- используйте условные Breakpoint’ы – «Edit» в раскрывающемся меню по левому клику мышки (например, условие «$variables['id'] == 2»);
- изменяйте файлы ядра, только если у вас подключен Git (или другая система контроля версий) для того, чтобы после отладки без проблем откатить ядро в первозданный вид;
- для быстрого перехода в функцию используйте клик мышкой по ее названию с зажатой клавишей Ctrl.
Собственно на этом теория заканчивается и вам пора переходить к практике. Еще раз повторюсь, не переживайте о предстоящем затраченном времени – умение работать с отладчиком вам не раз еще пригодится. Надеюсь, материал окажется хоть для кого-то полезным – уведомьте меня тогда, пожалуйста, об этом в комментариях!
Комментарии
Ох, намучился, но все же настроил. Думаю, инструмент окажется очень полезным в ближайшем будущем. Спасибо автору за руководство!
уже неделю разными способами пытаюсь поставить пхпшторм 8.1 + хдебаг + опенсервер. нихрена ни выходит. все так просто на писано, но на практике не работает...
Спасибо автору.
Версия PhpStorm поменялась, нюансы пришлось добавить из статьи http://drupalace.ru/lesson/nastroyka-otladchika-xdebug-mezhdu-ide-phpstorm-i-serverom-open-server
Спасибо вам за работу!
Спасибо, вроде помогло) Ошибки еще не исправлены, но дебаггер функционирует как надо.
Не работает, ни этим способом, ни другими что в гугле нашел. Xdebug установлен корректно, об этом сообщает функция phpinfo():
xdebug support enabled
Version 2.3.2
IDE Key PHPSTORM
Но в PHPStorm ни в какую не хочет подключаться...
Добавить комментарий