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


Отладка тем и плагинов 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, либо в другом месте, что зависит от вашей платформы):

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

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

Проверка Xdebug

Создайте страницу под названием test.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 в правом верхнем углу:

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

 

eclipse_open_perspective_php

 

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

Теперь выбираем «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:

01http://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 имеет несколько средств управления:

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 в свой браузер:

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

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

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

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

 

wpcraft.ru

Отладка с помощью Xdebug, VVV и Sublime Text

Xdebug – это PHP-расширение, которое предлагает продвинутые возможности отладки, такие как точки останова, просмотр переменных, а также более глубокий отчет об ошибках.

Ставим Xdebug

Xdebug должен быть установлен в вашей локальной системе, будь то MAMP, Vagrant или любое другое решение. В данном руководстве я рассмотрю то, как установить Xdebug на Vagrant с Varying Vagrant Vagrants (VVV). На MAMP запустить его не составит труда.

В VVV по умолчанию уже стоит Xdebug, однако его нужно вручную активировать. Сделать это можно, подключившись через SSH на Vagrant (vagrant ssh) и запустив xdebug_on. Вы должны будете это делать всякий раз, когда вы уничтожаете и заново создаете экземпляр Vagrant.

Вы можете также отключить Xdebug (если расширенные сообщения об ошибках мешают вам), выполнив подключение через SSH и запустив xdebug_off.

Таким образом, теперь, когда у вас запущен Xdebug, вы можете приступать к отладке. Во-первых, все ваши уведомления об ошибках PHP будут заменены на нечто следующее:

xdeb

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

Однако Xdebug может гораздо больше! Чтобы получить остальную часть отладочных возможностей Xdebug, вам понадобится клиент Xdebug – я хочу показать вам, как подцепить плагин Sublime Text Xdebug.

Для начала устанавливаем плагин, используя Sublime Text Package Control (который, естественно, уже установлен у вас), нажав CTRL-SHIFT-P и выбрав «Package Control: Install Package», после чего выбрав «Xdebug Client».

s1

После того как клиент будет установлен, вам нужно сконфигурировать его для корректного взаимодействия с Xdebug VVV. Открываем настройки Xdebug Client, нажав CTRL-SHIFT-P, после чего выбираем «Preferences: Xdebug Settings – User» (вы можете видеть и другие доступные опции, выбрав «Preferences: Xdebug Settings – Default»).

{ "path_mapping": { "/srv/www": "/path/to/vagrant-local/www" }, "max_depth": 5 }

Просто измените «/path/to/vagrant-local/www» на абсолютный путь к вашей www-папке VVV, и Sublime Text Xdebug Client будет знать, где искать ваш локальный код.

Используем Xdebug

Теперь, когда Xdebug активирован и связан с Sublime Text, вы можете управлять Xdebug Client путем нажатия CTRL-SHIFT-P и запуска различных Xdebug команд.

s2

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

s3

Этот небольшой плагин очень простой; возможно, вы уже заметили причину, почему «THE PLUGIN WORKS» не выводится после контента записи, однако это просто пример. Более сложные ошибки можно поправить тем же самым методом.

Таким образом, у нас есть код, у нас есть пост, который выводится без текста «THE PLUGIN WORKS» в самом конце, и мы не знаем, почему так происходит. Давайте добавим точку останова. Перемещаем курсор на строку 25 и нажимаем «CMD-F8» или «CMD-SHIFT-P», после чего ищем «Xdebug: Add/Remove Breakpoint».

s4

Небольшой кружочек рядом со строкой означает, что у нас установлена в ней точка останова. Убедитесь в том, что Xdebug включен в VVV, после чего подключите Sublime Text к VVV Xdebug, запустив команду «Xdebug: Start Debugging» (CMD-SHIFT-F9).

Возвращаемся обратно в браузер и обновляем страницу. Все будет выглядеть так, словно она начала загружаться, после чего загрузка остановилась. Это вызвано тем, что точка останова вступила в работу и приостановила процесс PHP, вследствие чего вы можете видеть некоторый результат. Переключитесь обратно на Sublime Text. Вы увидите нечто следующее:

s5

Желтая стрелочка помечает строку, в которой выполнение PHP было приостановлено, эта строка еще не была запущена. Окно Xdebug Context отображает локальные и глобальные переменные, которые в данный момент доступны. Окно Xdebug Stack показывает весь путь к данной точке в процессе работы (какая цепочка функций привела к вызову текущей функции).

Для выявления данной ошибки нам нужно обратить внимание на Xdebug Context. Мы хотим понять, почему к переменной $content не было ничего добавлено. Если я разверну объект $this, чтобы мы могли проинспектировать локальную переменную to_append, я увижу, что эта переменная пуста:

s6

Смотрим обратно на функцию конструктора и видим, что переменная не присваивалась, поэтому добавим $this->to_append = $append_text; сразу после строки 17, чтобы исправить проблему. Идем дальше и заканчиваем текущий процесс отладки, нажав CMD-SHIFT-P и выбрав «Xdebug: Breakpoint – Detach». Страница продолжит свою загрузку.

Как только исправление было сделано, я могу вновь обновить страницу. Точка останова сработает снова, и на сей раз я увижу в Xdebug Context, что все работает, как положено:

s7

Если я запущу Xdebug: Stop Debugging (и Xdebug: Restore Layout), то страница закончит свою загрузку и я смогу убедиться в том, что плагин работает, как положено:

s8

Углубляемся в отладку

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

s9

Используя следующие три step-функции, вы можете:

Забавно даже просто перемещаться по коду без ошибок и видеть все в замедленном действии.

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

Источник: webdevstudios.com

oddstyle.ru

Настройка Xdebug для удаленной отладки

Постоянные проблемы с отладкой на удаленном сервере у знакомых и друзей подтолкнули меня написать подробный пост про настройку Xdebug и IDE для отладки remote веб-сервера.

Следующая статья описывает настройку Xdebug, когда сервер разработки находится за NAT-ом (сервер не имеет прямого доступа по IP к машине с IDE).

Предполагается, что Linux + Apache + php установленjо и работает корректно.

Рассматривается на примере Ubuntu, но это легко перенести на любую систему *nix.

$ sudo apt-get install php5-xdebug

После установки проверьте, что расширение подгрузилось через вывод функции phpinfo():xdebug-phpinfoxdebug-phpinfo

 

или из командной строки

/etc/php5/cli/conf.d/20-xdebug.ini

xdebug

xdebug support => enabled

xdebug.auto_trace => Off => Off

xdebug.cli_color => 0 => 0

xdebug.collect_assignments => Off => Off

xdebug.collect_includes => On => On

[...]

Если в командной строке xdebug присутствует, а в phpinfo нет, видимо конфигурация apache не обновлялась. Перезапустите веб-сервер или укажите перечитать конфигурацию.

Если его нет и в выводе php -i командной строки — укажите php вручную откуда загружать расширение.

Для настройка Xdebug необходимо установить некоторые параметры, отвечающие за удаленную отладку в файле-конфигурации xdebug.

Можно установить эти параметры прямо в php.ini, но лучше использовать для этого специальную конфигурацию (xdebug.ini).

Веб-сервер (apache)

Настроем xdebug для веб-сервера.

В моей версии Ubuntu 14.04 файл конфигурации лег /etc/php5/mods-available/20-xdebug.ini

Отредактируем его (используйте любой удобный для вас редактор)

$ sudo vi /etc/php5/mods-available/20-xdebug.ini

; Enable xdebug extension module

zend_extension=xdebug.so

; xdebug remote settings

xdebug.remote_enable=on

xdebug.remote_handler=dbgp

xdebug.remote_host=192.168.1.101

xdebug.remote_port=9000

xdebug.remote_log=/var/www/logs/xdebug.log

; see http://xdebug.org/docs/all_settings

Основные параметры это:

xdebug.remote_enable=on # Разрешаем xdebug удаленную отладку

xdebug.remote_host=192.168.1.101 # IP-адрес системы, на которой установлена IDE

xdebug.remote_port=9000 # Порт отладки, которую слушает IDE (default: 9000)

Описание остальных параметров можно прочитать на официальном сайте.

Перегружаем конфигурацию apache:

$ sudo service apache2 reload

и проверяем что наши параметры изменились в phpinfo().

IDE (phpStorm 7)

Перейдем к настройке вашей любимой IDE.

  1. Проверяем, что порт отладки соответствует тому, что мы прописали выше (9000):phpStorm -> File -> Settings -> [Project Settings] -> PHP -> Debugxdebug-phpstorm-settings-xdebugxdebug-phpstorm-settings-xdebug
  2. Создаем конфигурацию отладки:Debug -> Edit Configurations -> Create Web Application configurationxdebug-phpstorm-debug-edit_configurationsxdebug-phpstorm-debug-edit_configurationsxdebug-phpstorm-add-web_appxdebug-phpstorm-add-web_app
  3. Настраиваем созданную конфигурацию (одиночный экземпляр отладчика, браузер для отправки HTTP запроса с сессией Xdebug, сервер и маппинг путей к файлам):xdebug-phpstorm-debug-server-settingsxdebug-phpstorm-debug-server-settings

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

И запускаем отладку.

Браузер должен выполнить HTTP запрос с GET -параметром XDEBUG_SESSION_START=%UNIQUE_ID%, который запустит инициализацию соединения со стороны веб-сервера по указанному IP-адресу и порту, где уже слушает IDE и ждет когда же остановить выполнение (GIF-ка, честно сворованная с оф.сайта Xdebug, очень хорошо это иллюстрирует).

xdebug-phpstorm-debug-processxdebug-phpstorm-debug-process

Enjoy!

rakcheev.ru


Смотрите также

Prostoy-Site | Все права защищены © 2018 | Карта сайта