Отладка тем и плагинов WordPress с помощью Eclipse и Xdebug
Отладка 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:xamppphpphp.ini, либо в другом месте, что зависит от вашей платформы):
zend_extension="/absolute/path/to/xdebug.so" xdebug.remote_enable = 1
Как только вы сделаете это, перезапустите сервер Apache. Есть много других опций, которые вы также можете задать – все они описаны в документации к xdebug, – но этого будет достаточно, чтобы начать работу с отладчиком.
Проверка Xdebug
Создайте страницу под названием test.php в вашей корневой папке и добавьте к ней вызов функции phpinfo():
<?php phpinfo(); ?>
Задайте поиск по «xdebug», в результате чего вы должны обнаружить секцию в самом низу страницы, которая выглядит следующим образом:
Установка Eclipse и PDT
Скачайте Eclipse Classic с сайта Eclipse, разархивируйте и скопируйте в папку с вашими приложениями, после чего запустите.
Щелкните по меню Help, затем Install Software. В списке Work With выберите пункт Indigo. Отметьте пункт «PHP Development Tools (PDT) Feature», после чего кликните Next.
Пройдите по оставшимся шагам мастера для завершения установки, после чего перезапустите Eclipse.
Настройка Eclipse для связи с Xdebug
Включите PHP-вид путем нажатия на кнопку Open Perspective в правом верхнем углу:
Выберите опцию «Other», затем «PHP» и щелкните Ok:
Щелчок по кнопке PHP переведет к PHP-виду:
Теперь выбираем «File – New – PHP Project». Вы увидите окно New PHP Project. Вы можете ввести «wordpress» (или любой другой текст) в качестве названия вашего проекта. Вы должны выбрать опцию «Create project at existing location (from existing source)» из списка Contents и выбрать вашу корневую директорию WordPress. Для всех остальных разделов можно оставить значения по умолчанию. Теперь жмем по кнопке Finish.
Идем в Window – Preferences – PHP – Debug и изменяем параметр PHP Debugger с Zend на XDebug.
Теперь переходим в Window – Preferences – PHP – Debug – Installed Debuggers и два раза щелкаем по XDebug. Изменяем опцию Accept remote session (JIT) с off на localhost и щелкаем Ok.
Шаг 2. Отладка кода.
Задаем контрольные точки
Контрольная точка – это маркер, который указывает отладчику на необходимость приостановить выполнение программы в определенной строке кода. Вы можете изучить, что произошло в этой позиции.
Все просто. Откройте файл, содержащий код, который вы желаете изучить (к примеру, файл index.php темы, находящейся в разработке). Затем в левой части окна файла выполните двойной щелчок по серой области слева от строки. Должна появиться синяя точка, как это показано в примере ниже на строке 20 (файл index.php из темы twenty eleven):
Запуск сессии Xdebug
После установки контрольной точки откройте браузер и перейдите к вашему локальному WordPress сайту, добавив к адресу строку запроса XDEBUG_SESSION_START=wordpress:
http://localhost/path/to/wordpress/?XDEBUG_SESSION_START=wordpress
С помощью этой строки вы укажете xdebug, что нужно установить cookie, которые отладчик будет искать при последующих загрузках страницы. Если все настроено верно, вы увидите уведомление, что Eclipse открыл входящую сессию. Щелкните Ok для подтверждения, после чего Debug должен открыться на первой строке index.php:
Вы можете изучить переменные, которые в настоящее время находятся в области видимости, используя окно инспектора Variables в правой части программы. В примере выше никаких локальных переменных нет, заданы только глобальные переменные $_COOKIE, $_ENV, $_FILES, $_GET, $_POST, $_REQUEST, $_SERVER и $GLOBALS.
Двигаемся по коду
Чтобы увидеть более полезную информацию, вам понадобится пройти несколько строк кода и добраться до цикла. Окно Debug имеет несколько средств управления:
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.
Щелкаем 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