Отладка PHP кода в PhpStorm с использованием Xdebug

Настройка Xdebug и PhpStorm для отладки

Основным преимуществом использования PhpStorm вместо блокнота при написании кода является возможность использования отладчика (или "дебаггера"). Отладчик позволяет проникнуть внутрь кода для отслеживания изменения переменных и анализа логики его работы на различных этапах исполнения скрипта или движка, в нашем случае - Drupal.

Скажу честно, что я начал активно использовать дебаггер только спустя полутора лет web-разработки. Да, я считал, что надо "писать код бляць" и не отвлекаться на изучение каких-то непонятных дебаггеров. Но в конечном счете мне пришлось столкнуться с серьезной командной разработкой, где без использования отладчика делать было нечего. Поэтому мой вам совет: потратьте один, да хоть и два дня, но разберитесь в тонкостях работы с PHP отладчиком. Ну а я вам в этом постараюсь помочь.

В рамках этой статьи будет рассмотрена связка OpenServer, Xdebug (по умолчанию идет с OpenServer) и PhpStorm - про первичную настройку среды разработки я уже писал, рекомендую начать с нее. Также нам потребуется уже созданный локальный сайт и проект в PhpStorm – у меня это будет www.angarsky.loc.

Конфигурация отладчика в PhpStorm

Настраивать отладчик мы будем на примере index.php – начинайте настройку именно с этой страницы, т.к. при запуске движков она обязательно отрабатывает.

Настройка отладчика в PhpStorm

В раскрывшемся окне первым делом жмем на значок «+» и выбираем PHP Web Application. Заполняем поле Name, выбираем ваш любимый браузер для разработки и в качестве Start URL указываем страницу сайта для стартового запуска. Обратите внимание, что указывается относительный путь.

Конфигурация PHP Web Application

Следующим шагом будет конфигурирование Server. Опять же жмем «+», заполняем Name, Host и Use path mappings. Заполняем все по аналогии со следующим скриншотом и жмем «ОК».

Настройка Servers

Аналогичным нажатием на «ОК» завершаем конфигурацию и PHP Web Application. Если все сделано верно, то можно приступать к пробному запуску. Для этого ставим Breakpoint (по-русски, «точка остановки») и жмем иконку запуска дебаггера.

Установка Breakpoint

Если все сделано верно, то вас перебросит в выбранный браузер, где начнет загрузку страница вида:
http://www.angarsky.loc/?XDEBUG_SESSION_START=10098.
Буквально сразу у вас замигает иконка PhpStorm на панели Windows. Переходим в PhpStorm и видим следующую картину.

Процесс отладки PHP кода

Теперь более подробно о том, что я отметил маркерами:

  1. Стек функций, который прошел скрипт до нашего Breakpoint’а.
  2. Список переменных, доступных в данной функции в данный момент исполнения кода.
  3. Список переменных для отслеживания. Сюда вы можете перетаскивать все необходимые переменные из второй колонки, значения которых необходимо отследить.
  4. Кнопка остановки отладчика.
  5. Кнопки для навигации в коде: переход на следующую строку кода, переход к следующей точке остановки. Однако я рекомендую работать с горячими клавишами – о них чуть ниже.
  6. Указатель строки текущего состояния отладчика.

Чтобы выйти из состояния отладки нажмите «F9». Можете перейти обратно в браузер и убедиться, что страница сайта загрузилось как обычно. Если обновить страницу, то опять сработает дебаггер – это будет происходить до тех пор, пока вы не отключите процесс отладки.

Управление процессом отладки

Ниже приведены комбинации горячих клавиш, необходимых для быстрой отладки кода:

  • F7 – переход к следующему шагу кода, выполняя заход во все встречающиеся функции.
  • F8 – переход к следующей строке кода, минуя заход в функции.
  • F9 – переход к следующему Breakpoint’у или завершение процесса отладки при их отсутствии.
  • Shift + F8 – выход из текущей функции.

Для дальнейшего наглядного примера я поставил Breakpoint в своей кастомной функции, отвечающей за изменение комментариев.

Отладка кода в PhpStorm

Как вы можете заметить стек функций уже гораздо больший, нежели в первом примере. Теперь небольшое пояснение по горячим клавишам.

Собственно сейчас отладчик находится на строке 15. Если «шагать» по коду, используя клавишу F7, то вы через два шага вы окажетесь в функции drupal_get_path(). При использовании клавиши F8 функция drupal_get_path() будет выполнена в фоне, а вы сразу окажетесь на строке 18. При нажатии комбинации Shift + F8 вы выйдете из текущей функции и окажитесь в theme() на 1222 строке (см. стек функций). Таким образом, для быстрой отладки необходимо владеть всеми этими приемами.

Отладка PHP ошибок

Любой разработчик рано или поздно сталкивается с ошибками в коде. Серьезные ошибки Drupal выводит в сообщениях статуса, предупреждения (PHP warnings) логирует в журнале. Именно для устранения ошибок нам и пригодится отладчик. Для начала выясняем, на каком этапе появляется ошибка (название функции и номер строки) и устанавливаем Breakpoint в данное место. Запускаем отладчик и начинаем поиск ошибки:

  • проверяем все переменные, массивы, объекты;
  • анализируем их изменение в теле функции;
  • переходим на вышестоящие в стеке функции (по клику мыши названию функции в нижнем левом окне по), смотрим, какие данные передаются в текущую функцию;
  • расстанавливаем новые Breakpoint’ы, если это необходимо.

Устранение ошибок может занять как от нескольких секунд, так до нескольких часов, особенно, если разработчик слабо знаком с архитектурой Drupal. Навык отладки приходит со временем – я, как бы хотел, не смогу объяснить в рамках данного поста все нюансы. Однако дам несколько советов, которые, возможно, позволят сэкономить несколько минут:

  • при установке Breakpoint на массив – размещайте его на строке с первым элементом массива, иначе он не отработает;
  • используйте условные Breakpoint’ы – «Edit» в раскрывающемся меню по левому клику мышки (например, условие «$variables['id'] == 2»);
  • изменяйте файлы ядра, только если у вас подключен Git (или другая система контроля версий) для того, чтобы после отладки без проблем откатить ядро в первозданный вид;
  • для быстрого перехода в функцию используйте клик мышкой по ее названию с зажатой клавишей Ctrl.

Собственно на этом теория заканчивается и вам пора переходить к практике. Еще раз повторюсь, не переживайте о предстоящем затраченном времени – умение работать с отладчиком вам не раз еще пригодится. Надеюсь, материал окажется хоть для кого-то полезным – уведомьте меня тогда, пожалуйста, об этом в комментариях!

Комментарии

Аватар пользователя EternalLight
EternalLight

Ох, намучился, но все же настроил. Думаю, инструмент окажется очень полезным в ближайшем будущем. Спасибо автору за руководство!

Аватар пользователя elca
elca

уже неделю разными способами пытаюсь поставить пхпшторм 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 ни в какую не хочет подключаться...

Добавить комментарий

  .d8888b.   888       8888888b.            
d88P Y88b 888 888 Y88b
888 888 888 888 888
888 888 888 888 d88P 88888b.
888 88888 888 .88P 8888888P" 888 "88b
888 888 888888K 888 888 888
Y88b d88P 888 "88b 888 888 d88P
"Y8888P88 888 888 888 88888P"
888
888
888
Зарегистрируйтесь для добавления материалов без проверки.