Отладка Bitrix24 с помощью Xdebug

Профилирование кода — один из важнейших и наиболее затратных моментов разработки функционала. Заменив привычные способы отладки через вывод данных на экран или записи в файл на инструменты для профилирования кода, можно получить существенный прирост к собственной производительности и комфорту. Давайте рассмотрим, что это и как этим пользоваться на примере Xdebug.

Как можно узнать, что происходит в момент выполнения кода? Самый простой способ — это вывести данные на экран. Но если данных много, идет обработка в цикле или вообще код не наш, а находится в сторонней библиотеке или ядре продукта, то такой подход становится затруднительным. Стало быть, нужно что-то придумать для решения этой проблемы.

На самом деле, всё придумано до нас, и проблема отладки и профилирования кода решается с помощью специальных инструментов. Давайте рассмотрим, как можно использовать PHP-расширение Xdebug, в частности при работе с Bitrix24.

Шаг 1. Разворот проекта

По классике мы будем использовать нашу Docker сборку для Bitrix24. Перед написанием статьи она была немного модифицирована, в неё был добавлен Xdebug. Если вы ранее использовали эту сборку, то следует вытянуть изменения к себе и перезапустить контейнеры. Подробнее о первичной настройке можно почитать здесь.

Шаг 2. Настройка XDebug в PHPStorm

Для работы нам потребуется установить плагин PHP Docker. Сделать это можно в настройках среды разработки (File -> Settings -> Plugins). Находим на вкладке Marketplace нужный плагин и устанавливаем (или активируем, если он уже установлен).

Установка плагина PHP Docker.

После установки плагина перезапускаем PHPstorm и возвращаемся в настройки в раздел Build, Execution, Deployment -> Docker. Если нет подключений, добавляем новое.

Добавление Docker сервера.

Далее необходимо убедиться, что вызов Docker и Docker Compose корректно настроен. Для этого переходим на вкладку Tools. Если у вас установлен Docker версии 2 и выше, то команды для вызова Docker и Compose будут идентичны.

Настройка запуска Docker и Docker Compose.

Следующим шагом будет настройка интерпретатора php. Переходим на вкладку PHP и открываем параметры CLI Interpreter (три точки рядом с полем выбора). Через иконку «плюсик» добавляем новый интерпретатор «From Docker». В настройках выбираем Docker Compose:

  • Server: Docker;
  • Service: php контейнер проекта.
Процесс добавления внешнего интерпретатора.

Сохраняем настройки и выбираем новый интерпретатор в настройках PHP.

Установка интерпретатора.

Теперь добавим сервер нашего проекта. Переходим на вкладку PHP -> Servers, нажимаем плюсик и заполняем поля:

  • Name: произвольное имя сервера;
  • Host: 127.0.0.1;
  • Port: 80 (если не используете https);
  • Use path mappings: Отмечаем чекбокс;
  • В появившейся структуре каталогов находим директорию www и соотносим её с путём /home/bitrix/www.
Добавление сервера.

Указываем порт 9001 на вкладке PHP->Debug в разделе Xdebug.

Настройка порта Xdebug.

Остаётся настроить параметр IDE key. Закрываем настройки и открываем в верхнем меню Run->Edit configurations. Добавляем новую запись в появившемся окне и выбираем PHP Remote Debug.

  • Filter debug connection by IDE key: отмечаем чекбокс;
  • Server: выбираем наш ранее созданный сервер;
  • IDE key: PHPSTORM.

Чекбоксы «Force break at first line…» можно отключить.

Шаг 2. Установка плагина Xdebug для браузера

На этом моменте сильно заострять внимание не будем, так как всё сводится к установке расширения, прописывании IDE ключа и запуска плагина.

Шаг 3. Запуск

Вот мы и подошли к самому интересному. Для запуска профайлера нужно выбрать в IDE (PHPStorm) ваш профиль и нажать на зелёную букашку.

Запуск Xdebug в PHPStorm.

Если всё в порядке, то в нижней части экрана должен появиться Debug интерфейс, в котором и будут отображены все интересующие нас данные.

Для примера напишем небольшой php скрипт и расставим контрольные точки (braekboint).

Код с контрольной точкой.

При выполнении кода каждый раз будет происходить остановка на контрольной точке, при этом на вкладке Thredes & Variables будет отражено состояние всех переменных на момент остановки.

3 итерация кода.

Как видно из примера, спустя несколько итераций переменная $i равно 2. Также можно посмотреть значения суперглобальных переменных, таких как $_COOKIE, $_SERVER, $_REQUEST и так далее.

Давайте теперь представим, что нам нужно посмотреть, что находится в переменной $arFields при вызове метода CCrmCompany::update. Открываем файл класса (www/bitrix/modules/crm/classes/general/crm_company.php) и находим нужный нам метод. В самом начале поставим brakepoint и попробуем обновить компанию в web интерфейсе Bitrix24.

Brakepoint в методе CAllCrmCompany::update

В момент вызова метода обновления компании произойдёт остановка и в Debug будут выведены данные, в том числе массив $arFields, который мы и хотели получить.

Значение переменных при остановке на контрольной точке.

Заключение

В результате использования Xdebug для отладки в Bitrix24, мы получаем мощный инструмент, способствующий более детальному и качественному анализу кода. Этот метод не только обеспечивает чистоту отображения данных на экране, но и открывает доступ к разнообразным возможностям профайлера, таким как анализ производительности и оптимизация кода. Таким образом, использование Xdebug становится неотъемлемой частью процесса разработки, повышая удобство и эффективность работы с платформой Bitrix24.

Дополнительные сведения о функционале профайлера можно найти на официальном сайте проекта.

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