Трикод

Блог программиста {три::код}

Yii: Дружим PhpStorm и Xdebug

Настройка дебаггера

Разберем связку PHPStorm и Xdebug. Не смотря на то, что подключение Xdebug, является штатным и простым делом, мне иногда приходится повторять процедуру по настройки дебагера. Запишу данную заметку, чтобы не наступать на одни и те же грабли.

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

Для тех, кто мало знаком с работой дебагера.

Сперва определим, зачем нужен дебаггер? Для меня отлов багов, не является основной целью связки xdebug и phpstorm. Больше, меня интересует возможность, увидеть процесс работы программы. В нужном месте устанавливается точка останова и в рабочем окне PhpStorm или другого редактора (с возможностью запуска разрабатываемого приложения), я наблюдаю все процессы работы программы. При помощи этого механизма, можно детально исследовать работу приложения. Предотвратить возможные ошибки, произвести оптимизацию, ну и найти баг.

Приведу пример. Создал программу для обработки файлов, баггов как таковых нет, программа работает, но происходит ошибка создания пути сохранения файла, причем не сразу, а в процессе работы. Я установил точку останова (break point), в месте, где путь передается в метод сохранения файла и подробно отследил как он создается и где возникает ошибка. В итоге удалось исправить ошибку, которая была в ошибке параметров запуска приложения, а не в нем самом.

Изображение из официальной документации.

Итак, дебагер указывает на ошибку сохранения файла. Чтобы её найти, придется использовать die() и var_dump(). Причем колоссальное количество раз. Причем это не исключит "заведения уголовного дела" и "проведения расследования". Ведь источник проблемы может оказаться не очевидным, как в моем случае.

Установив точку останова, в нужном месте, я проследил работу программы, от создания объекта приложения и инициализации параметров, до непосредственного сохранения обработанного файла.


Изображение из официальной документации.

В процессе работы дебаггера, отображаются все значения переменных и объектов созданных в процессе работы программы. Можно проследить все итерации массива, а можно пропустить обход и перейти к следующему шагу. Можно выполнить вход в метод, а можно "скользнуть" по нему, получив результат его работы и так далее.

Запуск и настройка этого инструмента, очень просты, по этому грех не вооружиться этим надежным и доступным оружием в борьбе с баггами.

Настройка Xdebug

  • Я произвожу настройку на OpenServer 5.2.2., в комплект которого входит Xdebug.
  • Сервер настроен на работу с PHP 5.6 и Xdebud 2.3.3
  • PhpStrom 9, но данная инструкция подойдет для любой предшествующей версии и наверняка многих последующих.

Для проверки установки Xdebug, необходимо вызвать функцию phpinfo() и найти раздел:

PhpStrom рекомендует Xdebug стабильных версий

В OpenServer, заходим в php.ini и раскомментируем следующие строки:

 
[Xdebug]
zend_extension = "%sprogdir%/modules/php/%phpdriver%/ext/php_xdebug.dll"
xdebug.default_enable = 1
xdebug.auto_trace = 0
xdebug.idekey = "PHPSTORM"
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "%sprogdir%/userdata/temp/xdebug/"
xdebug.profiler_output_name = "cachegrind.out.%H%R"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "%sprogdir%/userdata/temp/xdebug/"

Обратите внимание на эту настройку

 
xdebug.idekey = "PHPSTORM"

Это значение мы будем использовать для запуска сессии отладки

Настроим сервер в PHPStorm

Настроим, это громко сказано. Settings - Build, Execution, Deployment - Deployment

  • Type: In place.
  • Web server root URL: адрес сайта на локалке.

Итак, нам осталось проделать следующие шаги:

  1. Запустить прослушивание в PhpStorm,
  2. Установить кнопки работы с сессиями (закладки или расширение для браузера)
  3. Поставить точку останова (break point) в нужном месте

Шаг первый

Нажимаем на телефонную трубку Start Listening for PHP Debug Connection.

Шаг второй

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

Обратите внимание на IDE key при генерации закладок

IDE key, такой же как и в настройках php.ini

Подвариант с установкой расширения для браузера. Установите расширение для вашего браузера. Ссылка ведет на официальный док. PhpStorm со списком расширений для браузеров (FireFox, Chrome, Opera, Safari).

Я установил расширение для FireFox The easiest Xdebug и указал в настройках свой IDE key.

Работает одинаково, как с генерированными закладками, так и с расширением.

Нажимаем Start debugger (для закладки) или иконку enable debug (для расширения). Запускаем сессию на странице тестируемого скрипта. Если нам нужно протестировать загрузку файлов, открываем форму загрузки файла, выбираем файл и переходим к следующему этапу.

Шаг третий

Устанавливаем точку останова, простым кликом на поле возле нумерации строки.

/upload/post/image/2015/10/listing/eb794c5125_0_041015.jpg
Изображение из официальной документации

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

Запускаем дебаг

Все, что осталось сделать, это нажать F5 в браузере. Или как в рассматриваемом примере с загрузкой файла, нужно выполнить сохранение формы. Запустится сессия:


Изображение из официальной документации

Изображение из официальной документации

При запуске дебаггера PHPStorm выдаст нам окно, в котором нужно выбрать входной скрипт. В моем случае с Yii это: ../mblog/index.php

В дальнейшем, для повторного исследования нужно нажимать F5 в браузере или кнопку Run, в IDE.

Кнопка Run запустит программу для исследования. Изображение жука или кнопка debug запустит debugger, который выдаст все ошибки в процессе работы программы, включая ошибки JavaScript и не найденных файлов.

Данное руководство, я применил прежде всего в связке с фреймворком Yii, по этому будет работать 100%.

На этом всё!

Поля со * обязательны.