Отладка тем и плагинов WordPress с помощью Eclipse и Xdebug

Дата публикации:Сентябрь 1, 2013

Отладка PHP с помощью текстового редактора и разных комбинаций echo, print_r и exit вполне эффективна при работе с простым кодом. Однако если ваш WordPress плагин разросся до нескольких тысяч строк кода, разбитых по многочисленным файлам, то тогда этот метод отладки быстро станет утомительным и неудобным в плане поиска ошибок. Когда вы столкнетесь с такой ситуацией, вам понадобится перейти к удаленному отладчику, что позволит легко и быстро пройтись по всем строкам кода и выявить возникшие проблемы.

Удаленный отладчик – это программа, установленная на сервере, которая перехватывает весь выполняющийся PHP-код. Среди других ее возможностей стоит отметить останов запущенного кода в середине исполнения, а также передачу информации внешнему клиенту, такому как Integrated Development Environment (IDE). В этом учебном руководстве мы покажем, как использовать удаленный отладчик xdebug и open-source программу Eclipse IDE вместе, чтобы пройтись по всему WordPress-коду в поисках ошибок.

Шаг 1. Настраиваем среду разработки.

Я буду исходить из предположения, что вы уже имеете Apache/PHP/MySQL и функционирующую WordPress-сборку, запущенную на вашей локальной рабочей станции.

Устанавливаем Xdebug

Самые свежие и актуальные инструкции по установке могут быть найдены на сайте xdebug.

Если вы работаете с Windows, используя XAMPP, то бинарник xdebug уже будет подключен, и вы можете переходить к настройке PHP.

Если вы работаете с Mac OS X, я советую скомпилировать файл из источника или использовать PECL для установки отладчика.

Если вы используете Linux, вы можете установить отладчик, используя менеджер пакетов вашего дистрибутива, либо вы можете скомпилировать его из источника/с помощью PECL.

Настройка PHP для загрузки Xdebug

Вам нужно будет добавить следующие две строки в свой php.ini файл (который может находиться по адресу /etc/php.ini или c:\xampp\php\php.ini, либо в другом месте, что зависит от вашей платформы):

zend_extension="/absolute/path/to/xdebug.so"
xdebug.remote_enable = 1

Как только вы сделаете это, перезапустите сервер Apache. Есть много других опций, которые вы также можете задать — все они описаны в документации к xdebug, — но этого будет достаточно, чтобы начать работу с отладчиком.

Проверка Xdebug

Создайте страницу под названием test.php в вашей корневой папке и добавьте к ней вызов функции phpinfo():

<?php phpinfo(); ?>  

Задайте поиск по «xdebug», в результате чего вы должны обнаружить секцию в самом низу страницы, которая выглядит следующим образом:

phpinfo_xdebug

Установка Eclipse и PDT

Скачайте Eclipse Classic с сайта Eclipse, разархивируйте и скопируйте в папку с вашими приложениями, после чего запустите.

Щелкните по меню Help, затем Install Software. В списке Work With выберите пункт Indigo. Отметьте пункт «PHP Development Tools (PDT) Feature», после чего кликните Next.

eclipse_install_pdt

Пройдите по оставшимся шагам мастера для завершения установки, после чего перезапустите Eclipse.

Настройка Eclipse для связи с Xdebug

Включите PHP-вид путем нажатия на кнопку Open Perspective в правом верхнем углу:

eclipse_open_perspective

Выберите опцию «Other», затем «PHP» и щелкните Ok:

eclipse_open_perspective_php

Щелчок по кнопке PHP переведет к PHP-виду:

eclipse_php_button

Теперь выбираем «File — New — PHP Project». Вы увидите окно New PHP Project. Вы можете ввести «wordpress» (или любой другой текст) в качестве названия вашего проекта. Вы должны выбрать опцию «Create project at existing location (from existing source)» из списка Contents и выбрать вашу корневую директорию WordPress. Для всех остальных разделов можно оставить значения по умолчанию. Теперь жмем по кнопке Finish.

eclipse_new_php_project

Идем в Window — Preferences — PHP — Debug и изменяем параметр PHP Debugger с Zend на XDebug.

eclipse_debug_settings

Теперь переходим в Window — Preferences — PHP — Debug — Installed Debuggers и два раза щелкаем по XDebug. Изменяем опцию Accept remote session (JIT) с off на localhost и щелкаем Ok.

eclipse_xdebug_settings

Шаг 2. Отладка кода.

Задаем контрольные точки

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

Все просто. Откройте файл, содержащий код, который вы желаете изучить (к примеру, файл index.php темы, находящейся в разработке). Затем в левой части окна файла выполните двойной щелчок по серой области слева от строки. Должна появиться синяя точка, как это показано в примере ниже на строке 20 (файл index.php из темы twenty eleven):

eclipse_breakpoint

Запуск сессии Xdebug

После установки контрольной точки откройте браузер и перейдите к вашему локальному WordPress сайту, добавив к адресу строку запроса XDEBUG_SESSION_START=wordpress:

http://localhost/path/to/wordpress/?XDEBUG_SESSION_START=wordpress 

С помощью этой строки вы укажете xdebug, что нужно установить cookie, которые отладчик будет искать при последующих загрузках страницы. Если все настроено верно, вы увидите уведомление, что Eclipse открыл входящую сессию. Щелкните Ok для подтверждения, после чего Debug должен открыться на первой строке index.php:

eclipse_debug_view

Вы можете изучить переменные, которые в настоящее время находятся в области видимости, используя окно инспектора Variables в правой части программы. В примере выше никаких локальных переменных нет, заданы только глобальные переменные $_COOKIE, $_ENV, $_FILES, $_GET, $_POST, $_REQUEST, $_SERVER и $GLOBALS.

Двигаемся по коду

Чтобы увидеть более полезную информацию, вам понадобится пройти несколько строк кода и добраться до цикла. Окно Debug имеет несколько средств управления:

eclipse_debug_controls

Remove All Terminated Launches – чистит предыдущие сессии.

Resume – продолжает выполнение кода. Если у вас не задано других контрольных точек, программа просто завершит свою работу.

Suspend – не применяется к PHP-отладке.

Terminate – останавливает выполнение программы и ее отладку.

Disconnect – останавливает отладку, однако продолжает выполнение программы.

Step Into – перемещается по коду строка за строкой, включая вход в вызовы функций. Эта возможность полезна при отладке определенной функции.

Step Over – пропускает выполнение вызова определенной функции. Выполнение продолжится со следующей строки.

Step Return – если мы находимся внутри функции, то эта опция перейдет к тому месту, где функция возвращает результат.

Drop To Frame – не применяется к PHP-отладке

Use Step Filters – не поддерживается Eclipse PDT

Щелкаем по кнопке Resume. Клиент отладки Eclipse должен остановиться на контрольной точке, которую мы задали в файле index.php.

Щелкаем по кнопке Step Into. Мы войдем в функцию have_posts. Щелкаем снова Step Into, и мы увидим глобальную переменную $wp_query, которая отобразится в окне Variables.

eclipse_stepinto_haveposts

Щелкаем Step Return для выхода из функции have_posts, и мы вернемся к файлу index.php. В примере мы остановимся на вызове функции twentyeleven_content_nav. Мы можем либо войти в нее, чтобы увидеть то, что происходит в ней, либо выполнить Step over, чтобы перепрыгнуть через нее.

Щелкаем Step Over и переходим к циклу. Просмотр функции the_post поможет понять, как WordPress отбирает данные и записывает их на страницу в цикле. Следите за окном Variables, чтобы отслеживать изменение локальных и глобальных переменных при выполнении функции.

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

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

Если вы перейдете к другой странице браузера, то заметьте, что отладчик загрузится снова, даже если строка XDEBUG_SESSION_START не будет добавлена в конец URL.

Закрытие сессии отладки

Если отладка вам больше не требуется, просто введите следующий URL в свой браузер:

http://localhost/path/to/wordpress/?XDEBUG_SESSION_STOP  

Это удалит xdebug cookie, и ваши страницы будут загружаться, как обычно, пока вы не откроете новый сеанс xdebug.

Используете ли вы Eclipse и Xdebug?

Источник: wp.tutsplus.com

Поделиться

Один комментарий

  1. Mark says:

    Спасибо, буду пробовать!)

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

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