Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс

В этой статье я расскажу как удобно осуществлять отладку кода в PhpStorm на примере работы с веб-сайтом, работающем в системе 1C-Битрикс. Работать будем с IDE PhpStorm и отладчиком XDebug. Я предполагаю, что на вашем сервере уже установлен XDebug и у вас уже создан проект в PhpStorm.

В данной статье примеры приводятся с таким набором инструментов:
  • Веб-сервер — MAMP PRO
  • XDebug v2.2.3.
  • IDE PhpStorm 7.1
  • На моем локальном серевере установлен 1С-Битрикс 14 версии с решением интернет-магазина.


Итак, начнем.


Во время разработки часто приходится использовать функции типа print_r() или echo для вывода данных на экран. Я сам лично до недавнего времени использовал функции типа:

function pre($array)
{
    echo '<pre>';
    print_r($array);
    echo "</pre>";
}


Эта функция печатала массив на экран и уже в таком виде я его разбирал и вносил в код правки. Но что же делать, если принт огромного $arResult на странице недопустим? Что если на сайте уже есть посетители и выводить системную информацию категорически нельзя (для удаленного дебага будет полезна статья)? Тогда появляются еще более интересные функции типа:

function pre2($array)
{
    global $USER;
    if($USER->isAdmin())
    {
        echo ‘<pre>’;
        print_r($array);
        echo ‘</pre>';
    }
}


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

XDebug и PhpStorm


Эти два продукта дают нам возможность отказаться от вышеописанных функций да и вообще вывода переменных на экран при отладке приложения и получать данные прямо в IDE в удобном и читаемом виде:

image

Выше на скриншоте мы можем наблюдать объект $APPLICATION в окне дебага файла /index.php. Мы получили полную информацию об объекте, в сгруппированном виде, при этом мы можем наблюдать тип данных каждого элемента в объекте. И (внимание!) мы при этом нигде не писали ни каких var_dump() или print_r()!

Настройка PhpStorm для отладки с помощью XDebug


Перед тем как начать пользоваться такой прелестью нам нужно совершить несколько действий:

1. Настроить XDebug на сервере

Первым делом мы должны убедиться, что на серевере установлен XDebug. В данной статье я не буду рассматривать процесс установки XDebug на сервере, об этом есть много статей в интернете. Лишь покажу что нужно было сделать в MAMP, чтоб активировать XDebug:

Все действия совершались с файлом php.ini для сборки PHP версии 5.5.3. Как добраться к этому файлу в MAMP — ниже на скриншоте

image

В этом файле нужно раскоммертировать строку
zend_extension=»/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so»

и дописать строку
xdebug.remote_enable=1

image

После этого phpinfo() выдаст нам такую информацию:

image

XDebug готов к работе.

2. Настроить PhpStorm

Для получения данных от сайта в IDE нам нужно их подружить. Для начала нужен правильно настроенный сервер, к которому коннектится IDE при деплое. Переходим в настройки PhpStorm -> Deployment. Тут важен параметр Webserver Root URL, нужно указать URL корня вашего сайта. Пример моих настроек ниже:

image

Далее переходим к настройке XDebug в PhpStorm: главное меню Run -> Edit Configurations

image

Нажимаем на плюс, чтоб добавить новую настройку для дебага.

image

Выбираем настройку Php Web Application

image

Тут нужно настроить инструмент с помощью которого осуществляется дебаг, нажимаем на кнопку рядом с настройкой сервера:

image

Нажимаем на плюс, заполняем имя, хост сайта и нажимаем на Validate remote environment.

image

Там выбираем из списка тот сервер, который настраивали выше и нажимаем Validate

image

Если валидация прошла успешно, то мы готовы к дебагу. Применяем все сохраненные настройки и возвращаемся в редактор.

3. Расстановка брейкпоинтов (breakpoints)

Чтоб узнать значения переменных в текущем коде, нужно сообщить нашей IDE в каком именно месте кода мы хотим получить нужные нам значения. Для этого предусмотрен функционал брейкпоинтов. Выбираем нужную строку php-кода и нажимаем на область справа от номера строки.

image

4. Запуск дебага

Далее нужно включить прослушивание 9000 порта, на который XDebug будет посылать ответ при запуске скрипта, и нажать на зеленого жука слева (расположений кнопок в windows версии PhpStorm может отличаться).

image

После нажатия на жука у нас должен открыться браузер

image

и через несколько секунд снова откроется PhpStorm с дебаг-панелью, где будут значения всех переменных на момент обработки кода месте брейкпоинта

image
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 21

    0
    Пользуюсь этой связкой уже давно.
    Поставил на тестовый сервер с опцией remote_connect.
    Работает сразу несколько разработчиков — у всех debug есть.
      +1
      Тоже пользуюсь. Иногда жутко раздражают проблемы типа «can not get property value» или когда после мута брейкпоинтов все-равно выполнение прерывается. Еще бывают проблемы с маппингом.

      В общем это лучшее, что есть для дебаггинга в php, но, как я уже успел заметить, не без приколов.
        0
        Посмотрите в сторону phpdbg.com/
        Скоро появится поддержка.
      0
      Хотелось бы добавить еще очень полезную штуку www.jetbrains.com/phpstorm/marklets/, которая позволит не пользоваться «жуком», а просто, нажав на закладку, запустить дебагер.

      Нужно просто ввести IDE key своего xdebug, после чего жатать Generate. Вы получите 7 ссылок, которые можно перетянуть в закладки и преступить к использованию.
        0
        Мне вот закладками неудобно пользоваться, они у меня скрыты и показываются только на новых вкладках, то есть мне надо открыть новую вкладку и нажать на старт или стоп. Есть плагины под chrome, по крайней мере, точно, нажал иконку и работает…
        +2
        Простые истины, ради этого надо писать очередную статью о настройке связки xdebug + IDE? Вы еще забыли упомянуть про обратный коннект и использование xdebug на удаленном сервере, а отлаживаться локально или вы рассчитываете на вторую статью? Честно, скажу, слабо, тут такие статьи бывают, что порой себя считаешь недалеким.
          +2
          Для кого-то эти простые истины, для кого-то — нет. На каждую статью найдется своя аудитория.
          –1
          Есть одна трудность, которую Вы все же упустили наверное:

          Кнопка Дебаг (в виде жучка), запустит только ту страницу, которая была указана в конфиге да еще и в браузере по умолчанию. В результате, нету возможность перехода по ссылкам со включенным дебагом (не я имею ввиду без бубна), а также сабмитить формы.

          Лучшим же решением будет установка плагинов, которые автоматом добавляют куку при запросе.

          Для хрома chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc В результате, только включаем слушателя в шторме, жучка в хроме, и вауля, и все формы, и все страницы уже будут проходить через XDebug (Правда заметил фичу, не работает, если в браузер будет идти application/xml)
          Относительно других не знаю, но точно есть, так как вещь не заменимая.
            0
            При нажатии на кнопку Debug (в виде жучка) в браузере прописывается cookie. А браузер выбирается в конфигурации дебагера(именно IDE)
              –1
              Ну тогда объясните, как IDE (PHPStorm) может дописать куку в запросе, который генерит браузер, не имея на это прав?
              Почему тогда ж при нажатии на кнопку «жучка» добавляется GET параметр XDEBUG_SESSION_START
                0
                Я думаю, что это делает сам xdebug.
            +3
            Спасибо, Кэп)))
              0
              Пункт №2 можно опустить. Главное, чтобы Шторм был настроен на нужный PHP-Root
                0
                Я просто оставлю это здесь.
                Zero-Configuration Debugging
                  0
                  Я надеюсь автор пользуется xDebug`ом не только для получения значения переменных в заданном breakpoint. А еще пошагово отлаживает код, в том числе с проваливанием в вызываемые функции. А еще умеет вычислять выражения в той или иной точке кода.
                  • UFO just landed and posted this here
                      0
                      А при чем тут bitrix, собственно?
                        0
                        >>После этого php_info() выдаст нам такую информацию:
                        Как минимум phpinfo()
                          +1
                          Спасибо, поправил
                          0
                          >Нажимаем на плюс, чтоб добавить новую настройку для дебага. — наверно для этого скриншот можно было не делать) если человек пользуется ide для разработки он этот плюсик и так найдет)

                          а вот на моментах самой настройки и зачем они нужны, можно было остановится чуть подробнее, у меня например дальше PhpStorm Waiting for incoming connection with ide key '17887' не пошло
                            0
                            И у меня.

                          Only users with full accounts can post comments. Log in, please.