При работе с простым кодом достаточно отладки PHP с помощью текстового редактора и некоторой комбинации вызовов echo , print_r и exit . Однако, когда ваш плагин-убийца WordPress вырастет до нескольких тысяч строк, охватывающих несколько файлов, этот метод быстро станет утомительным и подверженным ошибкам. Когда вы достигнете этой точки, настанет время перейти к удаленному отладчику, чтобы вы могли быстро и легко пройтись по каждой строке кода, чтобы точно определить проблемы.
Удаленный отладчик — это программа, установленная на стороне сервера, которая перехватывает весь выполняемый код PHP. Помимо других функций, он имеет возможность прекращать выполнение кода в середине выполнения и передавать информацию внешнему клиенту, такому как интегрированная среда разработки (IDE). В этом руководстве будет рассказано, как использовать удаленный отладчик xdebug и Eclipse IDE с открытым исходным кодом для пошагового выполнения кода WordPress для устранения ошибок.
Шаг 1 Настройте среду разработки
Я предполагаю, что у вас уже есть Apache / PHP / MySQL и работающая установка WordPress, работающая на вашей локальной рабочей станции. Если нет, прочитайте наше руководство о том, как настроить среду разработки WordPress для Windows .
Установить Xdebug
Самые последние инструкции можно найти на веб-сайте xdebug .
Если вы используете Windows для разработки XAMPP, бинарный файл xdebug уже включен, и вы можете перейти к настройке PHP.
Если вы используете Mac OS X, я бы порекомендовал компилировать из исходного кода или использовать PECL для установки.
Если вы работаете в Linux, вы можете установить его с помощью диспетчера пакетов вашего дистрибутива или скомпилировать из исходного кода / использовать PECL.
Настройте PHP для загрузки Xdebug
Вам нужно будет добавить эти две строки в ваш файл php.ini (который может /etc/php.ini
в /etc/php.ini
или c:\xampp\php\php.ini
или где-то еще, в зависимости от вашей платформы):
1
2
|
zend_extension=»/absolute/path/to/xdebug.so»
xdebug.remote_enable = 1
|
Как только это будет сделано, перезапустите сервер Apache. Есть много других опций, которые вы можете настроить позже, которые описаны в документации по xdebug , но этого должно быть достаточно для начала работы.
Проверьте Xdebug
Создайте страницу с именем test.php в корневой веб-папке и добавьте вызов в функцию phpinfo ():
1
|
<?php phpinfo();
|
Ищите xdebug, и вы должны найти раздел внизу страницы, который выглядит следующим образом:
Установите Eclipse и PDT
Загрузите Eclipse Classic со страницы загрузки Eclipse , разархивируйте, скопируйте его в каталог приложений и запустите.
Выберите меню «Справка», затем «Установить программное обеспечение». Под опцией «Работа с» выберите сайт «Индиго». Установите один из флажков «Функция средств разработки PHP (PDT)», затем нажмите «Далее».
Нажмите на остальные шаги мастера, чтобы завершить установку, затем перезапустите Eclipse при появлении соответствующего запроса.
Настройте Eclipse для прослушивания Xdebug
Включите перспективу PHP, нажав кнопку Открыть перспективу в правом верхнем углу:
Затем выберите опцию «Другое», выберите PHP, затем нажмите «ОК»:
Нажмите кнопку PHP, чтобы перейти к перспективе PHP:
Затем перейдите в «Файл -> Новый -> Проект PHP». Откроется окно «Новый проект PHP». Вы можете ввести «WordPress» или как вы хотите для вашего проекта. Вы должны выбрать опцию «Создать проект в существующем местоположении (из существующего источника)» в разделе «Содержание» и перейти в корневой каталог WordPress. Оставьте значения по умолчанию для других разделов, затем нажмите кнопку «Готово».
Перейдите в «Окно -> Настройки -> PHP -> Отладка» и измените настройку «PHP Debugger» с Zend на XDebug.
Затем перейдите в «Окно -> Настройки -> PHP -> Отладка -> Установленные отладчики» и дважды щелкните XDebug. Измените параметр «Принимать удаленный сеанс (JIT)» с «выключен» на «локальный» и нажмите «ОК».
Шаг 2 Отладка вашего кода
Установить точки останова
Точка останова — это маркер, который указывает отладчику приостановить выполнение программы на определенной строке кода, чтобы вы могли проверить, что происходит.
Это легко. Просто откройте файл, содержащий код, который вы хотите проверить (например, файл index.php в разрабатываемой вами теме). Затем в левой части окна файла просто дважды щелкните серую область слева от строки. Синяя точка должна появиться, как в строке 20 в примере ниже (index.php из темы twentlyeleven).
Начать сессию Xdebug
После установки точки останова откройте браузер и перейдите на локальный сайт WordPress, добавив строку запроса XDEBUG_SESSION_START=wordpress
следующим образом:
1
|
http://localhost/path/to/wordpress/?XDEBUG_SESSION_START=wordpress
|
Это скажет xdebug установить cookie, который он будет искать при последующих загрузках страницы. Если все настроено правильно, вы должны увидеть уведомление о том, что Eclipse получил входящий сеанс. Нажмите «ОК» для подтверждения, и в первой строке index.php откроется представление «Отладка».
Вы можете проверить переменные, которые в данный момент находятся в области видимости, используя окно инспектора «Переменные» с правой стороны. В приведенном выше примере нет локальных переменных, на которые можно посмотреть, только глобальные переменные $ _COOKIE, $ _ENV, $ _FILES, $ _GET, $ _POST, $ _REQUEST, $ _SERVER и $ GLOBALS.
Пошаговый код
Чтобы увидеть пример более полезной информации, вам нужно будет пройти несколько строк кода, чтобы перейти к The Loop. Окно Eclipse «Debug» имеет несколько элементов управления, которые вы должны понимать:
- Удалить все завершенные запуски — очистить предыдущие сессии
- Resume — возобновляет выполнение кода. Если у вас не установлены другие точки останова, программа завершит нормальную загрузку.
- Suspend — не относится к отладке PHP.
- Завершить — остановить выполнение программы и отладку.
- Отключить — прекратить отладку, но продолжить выполнение программы.
- Шаг в — Следуйте коду, поскольку он выполняет построчно, включая вход в вызовы функций. Это полезно для отладки определенной функции.
- Step Over — пропустить показ выполнения определенного вызова функции. Выполнение возобновится на следующей строке.
- Шаг возврата — если внутри функции, он будет пропущен туда, где он возвращается.
- Drop To Frame — не относится к отладке PHP.
- Использовать пошаговые фильтры — не поддерживается в Eclipse PDT
Нажмите кнопку «Возобновить» один раз. Клиент отладки Eclipse должен затем сделать паузу на точке останова, которую вы установили в файле index.php темы.
Нажмите кнопку «Шаг вперед». Это перенесет вас в функцию «have_posts» WordPress. Снова нажмите «Step Into», и вы увидите глобальную переменную $ wp_query, отображаемую в окне «Переменные».
Нажмите «Шаг возврата», чтобы выйти из функции «have_posts», и вы вернетесь в файл index.php. В этом примере это оставит вас при вызове функции «twentyeleven_content_nav». Вы можете либо зайти в него, чтобы посмотреть, что происходит, если вам интересно, или перешагнуть через него, если это не так.
Нажав кнопку «Перешагнуть», вы перейдете к звонку в The Loop. Зайдя в «the_post», вы узнаете много нового о том, как WordPress извлекает данные и записывает их на страницу во время цикла. Следите за окном «Переменные», чтобы следить за изменением локальных и глобальных переменных при выполнении функции.
Вы также можете пройтись по собственному коду таким же образом, чтобы увидеть, как переменные обрабатываются во время выполнения кода.
Когда вы увидите все, что хотите увидеть, нажмите кнопку «Возобновить», и ваш блог завершит загрузку как обычно.
Если вы нажмете ссылку на другую страницу браузера, обратите внимание, что отладчик будет загружаться снова, даже если строка запроса XDEBUG_SESSION_START не добавляется в конец URL-адреса.
Закрытие отладочной сессии
Когда вы больше не хотите, чтобы Eclipse входил в режим отладки, когда страница загружается в ваш локальный блог, просто введите URL-вызов, который выглядит следующим образом, в вашем браузере:
1
|
http://localhost/path/to/wordpress/?XDEBUG_SESSION_STOP
|
Это удалит файл cookie xdebug, и ваши страницы будут загружаться нормально, пока вы не откроете еще один сеанс xdebug.
Используете ли вы Eclipse и Xdebug для жесткой разработки WordPress? Если да, есть ли у вас дополнительные советы? Если нет, то что вам мешает нырять?