Xdebug helper chrome настройка

Обновлено: 06.07.2024

Отладка - один из самых важных процессов в программировании. С помощью отладчика вы можете посмотреть что происходит в программе на самом деле, какие функции выполняются, что хранится в переменных, а также выполнить всё пошагово и точно понять на какой строчке и при каких значениях переменных случается ошибка.

Для языка программирования PHP используется отладчик Xdebug, PHPStorm - это одна из самых популярных сред разработки. В этой статье мы рассмотрим как настроить Xdebug в PhpStorm для отладки на локальном компьютере и в Docker.

Настройка Xdebug в PhpStorm

1. Отладка на локальном компьютере

Все настройки будут показаны на примере Ubuntu и интерпретатора PHP, настроенного вместе с Apache. Для других конфигураций пути к файлам могут отличаться, но суть останется та же. Давайте разберемся как это будет работать. Отладчик Xdebug позволяет приостанавливать выполнение кода, смотреть стек вызовов и содержимое переменных. Однако удобного интерфейса управления у него нет. Поэтому для управления отладкой будем использовать IDE. Но IDE не может никак сообщить отладчику что надо запустить отладку, потому что она отвечает только за код. Для этого понадобится ещё расширение для браузера Debug Helper, с помощью которого вы сможете включить режим отладки.

Сначала необходимо установить Xdebug. Для этого выполните:

sudo apt install xdebug

После завершения установки Xdebug надо настроить программу так, чтобы при запуске сеанса отладки она пыталась подключится к нашей IDE для управления отладкой. Для этого добавьте такие строчки в файл /etc/php/7.4/apache2/conf.d/20-xdebug.ini в версии Xdebug 2:

sudo vi /etc/php/7.4/apache2/conf.d/20-xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=false

Для новой версии Xdebug 3 старая конфигурация тоже будет работать, но лучше использовать новый стандарт:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9000

Давайте рассмотрим эти настройки подробнее. Первый параметр xdebug.mode - режим отладки, возможные варианты:

  • develop - включает вывод дополнительной информации, переопределяет var_dump;
  • debug - режим построчного выполнения кода, именно он нужен в данном случае;
  • profile - профилирование;
  • trace - трассировка выполнения программы.

Если необходимо, вы можете включить несколько режимов, перечислив их через запятую. Вторая строчка xdebug.start_with_request определяет как будет запускаться отладчик для режимов debug, trace и им подобных:

  • yes - всегда, при запуске php скриптов;
  • no - запуск только из кода с помощью специальных функций;
  • trigger - по запросу, с помощью специальной переменной в $_ENV, $_POST, $COOKIE или в другом массиве. Этот вариант подходит лучше всего в данном случае чтобы отладчик не запускался когда в этом нет необходимости.

sudo systemctl restart apache2

Теперь надо настроить PhpStorm. Запустите программу, затем откройте меню Run -> Edit Configurations. Перед вами откроется окно, в котором надо настроить отладчик.

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

Если вам нужно изменить порт, к которому будет подключаться Xdebug откройте меню File -> Settings -> PHP -> Debug -> DBGp Proxy. Здесь можно указать нужный порт:

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

Дальше осталось настроить браузер. Для Chrome можно скачать это расширение. Установите его и откройте страницу, которую надо отлаживать. Кликните по значку расширения и выберите Debug. Значок расширения станет зеленым:

Обновите страницу и возвращайтесь к PHPStorm. Если всё было сделано верно, там запустится сеанс отладки. При первом запуске программа может попросить настроить соответствия локальных путей к файлам с удаленными. Для локального сервера здесь ничего настраивать не надо, достаточно нажать Accept:

Дальше отладчик остановит выполнение на выбранной точке останова и в программе появится интерфейс отладки:

Как видите всё довольно просто. Дальше давайте разберемся как настроить Xdebug PhpStorm и Docker.

2. Отладка Php в Docker

C Docker возникает одна сложность. Поскольку отладчик должен сам подключится к IDE, необходимо пробросить хост в контейнер. В windows это можно сделать с помощью адреса host.docker.internal. Но в Linux, по умолчанию это не происходит. Для того чтобы добавить такой адрес надо добавить в docker-compose такие строчки:

Давайте для этого примера будем использовать такую структуру директорий:

Минимально необходимый docker-compose.yaml будет выглядеть вот так:

Здесь объявляется два контейнера, nginx и php-fpm. В первый не надо вносить никакие изменения, поэтому можно просто брать официальный образ, монтировать папку с исходниками, конфигурационный файл и пробрасывать порт. Во второй контейнер надо установить и настроить Xdebug поэтому его придется собрать на основе официального контейнера php. Для этого же контейнера надо указать директиву extra_hosts, без неё ничего работать не будет. Конфигурация Nginx тоже вполне стандартная:

Здесь настроена обработка PHP скриптов в контейнере php-fpm, и редирект несуществующих URL на index.php, что вполне стандартно для многих фреймворков и CMS. Самое интересное - Dockerfile контейнера php-fpm, он выглядит вот так:

FROM php:8.0.3-fpm-buster
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

Здесь устанавливается xdebug с помощью pecl, а затем копируется его конфигурационный файл в контейнер. Вот этот конфигурационный файл:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = host.docker.internal
xdebug.client_port = 9000

В контейнере установлен Xdebug 3 для PHP 8, потому что старая версия с этой версией языка уже не работает, поэтому используется новый синтаксис конфигурации. Ну и хост, host.docker.internal, который раньше был прописан в docker-compose.yaml. Настройка xdebug PHPStorm docker завершена. Дальше вы можете запустить проект:

docker-compose up --build

Теперь, как и в предыдущем варианте вы можете включить в браузере режим отладки, обновить страницу и отладчик успешно подключится к IDE, не смотря на то, что он работает в Docker:


Выводы

В этой статье мы рассмотрели как выполняется настройка xdebug PHPStorm на локальном компьютере и в Docker контейнере. Если всё сделать правильно отладчик будет работать и помогать вам искать ошибки в коде.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Опция xdebug.idekey может быть PhpStorm1, netbeans-xdebug, XDEBUG_ECLIPSE, в зависимости от IDE, или пустым.


В итоге вывод phpinfo() должен содержать информацию о xdebug:

Настройки клиента

Chrome Xdebug helper


Если планируется использовать idekey, то для Chrome нужно поставить Xdebug helper.
В настройках расширения параметр IDE key нужно указать PhpStorm1 и в Domain filter вписать host. При отладке в адресной строке нужно нажимать Debugging Enabled.

Настройка PhpStorm


File -> Settings -> xdebug. Port 9000. На панели Edit debug configuration -> Add New Configuration -> PHP Web Application
Нужно указать Name, Start URL, создать новый сервер. У сервера указать Name, Host, Port, path mapping. Сохранить все.

Теперь можно поставить точку останова и нажать на кнопку debug, чтобы IDE начала слушать порт. Запустится браузер со страницей Server + Start URL, а в параметре будет XDEBUG_SESSION_START, который определяет идентификатор сессии. Не теряйте его при отладке.

Port forwarding

Xdebug стучится в порт, который слушает IDE. Если мы хотим отлаживать удаленный сервер и сидим за NATом, то наши порты недоступны. Оптимальный вариант — перенаправление удаленного порта на локальный с помощью ssh. Для работы под windows нужно установить Cygwin с пакетом ssh.

Проверка port forwarding

Нужно попробовать установить связь на удаленной машине на ее 9000 порт. Если все сделано правильно, то соединение будет установлено, по факту, с нашим локальным портом.
Успешеный коннект:

Горячая клавиша выхода из telnet сессии — Ctrl + ].
Возможные ошибки:

В этом уроке мы проведем полную настройку дебаггера для PHP8 в связке с PhpStorm. Для PHP7 используйте инструкцию по настройке XDebug для PHP7.

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

Собственно, так как многим рекурсия показалась сложной, то я решил сделать урок по отладке кода на PHP 8. В этой статье мы рассмотрим настройку отладки с помощью PHP-расширения Xdebug, а производить отладку мы будем в уже известной нам IDE PHPStorm.

Настройка отладки PHP 8 в OpenServer

Первым делом нужно включить расширение Xdebug в файле конфигурации PHP (php.ini). Для этого идём в меню
OpenServer -> Дополнительно -> Конфигурация -> PHP8.

описание картинки

И раскомментируйте её, убрав ; в начале строки, чтобы получилось вот так:

Затем находим секцию [xdebug]

Здесь нам нужно раскомментировать/изменить значения параметров на следующие:

Конфигурация PHP экстеншена XDebug

После этого сохраните файл (CTRL + S) и перезапустите веб-сервер.

перезапуск OpenServer

На этом настройка веб-сервера для отладки завершена.

Настройка отладки в PHPStorm

Теперь нам нужно настроить отладку в PhpStorm. Первым делом идём в настройки:
File -> Settings

Здесь в левом меню выбираем:
PHP -> Debug

В секции Xdebug задаём следующие настройки:

  • Debug port: 9003
  • Force break at first line when no path mapping specified: выключено
  • Force break at first line when a script is outside the project: выключено

Xdebug в PhpStorm

Теперь в верхнем правом углу PhpStorm находим кнопку Add configuration

Конфигурация для дебага

В появившемся окне жмем на плюсик и выбираем пункт PHP Remote Debug.

PHP Remote debug

В поле Name пишем XDebug.

Ставим галочку напротив пункта "Filter debug connection by IDE key". В поле IDE key пишем "PHPSTORM". Напротив пункта Server нажимаем на три точки. При помощи плюсика добавляем новый сервер. Заполняем поля как на скриншоте ниже:

Добавление сервера отладки

Жмём ОК и выбираем только что добавленный сервер. Должно получиться так:

Конфигурация Xdebug

После чего снова жмём ОК.

Настройка расширения Xdebug helper

Далее заходим в магазин расширений Google Chrome, находим расширение XDebug helper и устанавливаем его.

установка XDebug helper

В правом верхнем углу Google Chrome находим иконку с паззлом, жмем на нее, и напротив XDebug helper жмём на три точки. Выбираем пункт "Параметры".

Настройки плагина xdebug helper

В секции IDE key выбираем PhpStorm и обязательно! жмём кнопку Save.

Жмём на паззл ещё раз, и напротив пункта Xdebug helper жмём кнопку для закрепления плагина на панели.

закрепление плагина

Начинаем отлаживать

Итак, все настройки выполнены и дело осталось за малым – начать пользоваться отладчиком.

Вернёмся снова в IDE, в нашем index.php запишем следующий код:

А затем слева от строки $x *= 2; кликнем по пространству между номером строки и самим кодом – появится красная точка.

Ставим брейкпоинт

Это брэйкпоинт (breakpoint), или, как её ещё называют – точка останова. К ней мы вернёмся чуть позже.

В правом верхнем углу PhpStorm напротив выбранной конфигурации XDebug нажимаем на значок зеленого жучка. На нём загорится точка. Внизу IDE появится консоль.

Консоль отладки

Нажмем правой кнопкой мыши на вкладке Console и уберем галочку "Focus on startup".

Выключаем вкладку консоли по умолчанию

И переходим во вкладку Debugger.

Вкладка Debugger

Теперь возвращаемся во вкладку браузера с нашим открытым проектом, жмём на иконку плагина Xdebug helper (жучок), выбираем пункт Debug.

Debug

После чего значок станет зелёным.

Ожидание загрузки страницы

Теперь можно в Chrome обновить страницу, и увидеть, что она повисла в режиме загрузки.

Сработала точка останова в PHPStorm

А в окне PHPStorm увидеть следующее:

Наша программа остановила своё выполнение в месте брэйкпоинта.

Внизу программы (во вкладке Variables) мы можем видеть значения всех переменных в данный момент. Как видим, сейчас (до выполнения строки 5) $x равна 7.

Переход на следующий шаг

Давайте нажмём кнопку “F8”. Она осуществляет выполнение кода на текущей строке и останавливается перед следующим действием.

Умножили $x на 2, и как видим, её значение стало равно 14. Вот так с помощью отладки мы можем отслеживать значения переменных в какой-то определенный момент работы программы.

Помимо этого, есть, разумеется, и другие сочетания клавиш, которые используются во время отладки.

Давайте прямо сейчас нажмём F9. Это приведет к тому, что программа продолжит выполнение до следующего брэйкпоинта (да, их можно наставить сколько угодно). Если их больше не встретится (как в нашем примере), то программа просто завершит свою работу.

Давайте поиграемся с кодом посложнее:

Два брэйкпоинта

И установим два брэйкпоинта на строках 5 и 10.

Попали в первый брэйкпоинт

После чего обновим нашу страничку в браузере и попадём в первый брэйкпоинт на строке 10:

Попали на следующий брэйкпоинт

Здесь мы видим значения переменных $x и $y внутри функции. Нажмём F9 и программа выполнится до того момента, пока не дойдёт до следующего брэйкпоинта.

Здесь мы уже видим, что внутри функции доступны переменные $x и $y. Но это уже другие переменные, не те, что были переданы в функцию getSumOfCos(). Вот мы и увидели локальную область видимости в действии.

Стек вызовов

Помимо этого, в левом нижнем углу есть окошечко “Frames”, это так назваемый “стек вызовов”. Здесь мы можем переключаться на места, откуда был вызван наш код ранее. Так мы можем переключиться в то место, где была вызвана функция getSum().

И можем посмотреть переменные, которые были доступны в той области видимости (уровнем выше).

Watches при отладке

Ещё в правом нижнем углу можно увидеть окошечко “Watches”. Это такое место, где можно задать переменные или даже выражения, значения для которых вы хотели бы видеть всегда под рукой. Добавляются они туда с помощью плюсика. В появившемся окошечке вводим выражение, которое мы бы хотели отслеживать. Пусть это будет $x/2.

Отлично, осталось рассмотреть ещё одну клавишу и вы готовы к бою – F7. Она позволяет зайти “внутрь” какой-либо конструкции.

Один брэйкпоинт

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

Если сейчас нажать F8, то программа закончит своё выполнение, и мы не попадём внутрь функций. Так происходит потому что во время отладки мы работаем на определённых уровнях вложенности, и если нам нужно будет попасть внутрь функции, то нужно будет нажать F7, находясь на строке 15. После этого мы окажемся на строке 10. Если сейчас нажать F8, попадём на строку 11. Ещё раз – на строку 12. Если мы сейчас, находясь на 12 строке нажмем F7, то попадём внутрь функции getSum() на строку 5. А если бы мы нажали F8, то мы просто поднялись бы на уровень выше, в то место, где была вызвана функция getSumOfCos().

В принципе, большего для отладки вам не потребуется (лично мне этого хватает).

Ну а сейчас пришла пора поотлаживать рекурсивные функции. Коль уж у вас возникли проблемы с прошлой домашкой – давайте их решать =)

Давайте возьмем и поковыряем код из предыдущей домашки:

Отладка рекурсивной функции

Поставим брэйкпоинт на 3 строке и запустим программу.

Уровень вложенности возрос

Итак, в функцию попала переменная $x = 3. Нажимаем F8, и попадаем на строку 7, так как условие не выполнилось. Теперь нажмём F7 и снова попадём в начало нашей функции, но теперь $x = 2. И при этом стек вызовов увеличился ещё на одну строку, то есть мы вошли в ещё один уровень вложенности.

И ещё один уровень вложенности

Жмём F8 и снова оказываемся на строке 7. Нажимаем F7 и снова попадаем в новый вызов функции, только уже $x = 1, а в стэке вызовов появился ещё один уровень.

Пошёл вывод

Снова F8 и затем F7. И вот уже в функции $x = 0.
Жмём F8 и оказываемся на строке 4 (теперь условие выполнилось). На этой строке программа выведет 0.

Жмём F8 и попадаем на строку 5. Сейчас функция завершит свою работу и мы попадём на уровень выше, в то место, где она была вызвана. Итак, жмём F8.

Вернулись на уровень выше

Вуаля, мы вернулись на уровень выше, там, где переменная $x = 1.

И попали мы на следующую строку, после той в которой вызвали функцию numbers(1 - 1). И на этой строке мы вывели уже число 1. А дальше – жмите F8 и наблюдайте за ходом выполнения программы. Надеюсь теперь рекурсия для вас понятна =)

Настройка отладки php-кода при помощи Xdebug

Классические методы отладки на PHP — использование функций error_log, print_r и var_dump. Их проблема в том, что они не помогают отслеживать сам процесс работы кода. Однако с этой задачей справляется Xdebug — один из самых популярных инструментов среди PHP-разработчиков, которые хотят работать, а не страдать.

В этой статье будет рассмотрена отладка PHP с помощью связки Xdebug и VSCode. Если вы пользуетесь PHPStorm, то проблем тоже не будет — настройка выполняется даже проще и быстрее.

Возможности Xdebug

Xdebug — это расширение для PHP, которое позволяет использовать удаленный отладчик в IDE через брейк-пойнты. С его помощью вы можете отслеживать значения переменных. Как итог — ошибки в коде обнаруживаются быстрее, чем при использовании error_log, print_r и var_dump.

Еще одна полезная функция — трассировка стека. Она выводит подробный путь, который привел приложение к ошибке. Он содержит параметры, переданные в функцию. Xdebug также можно использовать как профайлер для поиска узких мест кода. Если добавить внешние инструменты, то получится визуализировать графики производительности. Например, можно использовать WebGrind — набор PHP-скриптов для удобного вывода статистики прямо в браузере.

Кроме того, с помощью Xdebug вы можете проследить, какая часть кода выполняется в процессе запроса. Это дает информацию о том, как хорошо код покрыт тестами.

Подключение Xdebug

Для работы Xdebug PHP должен быть в режиме CGI. Посмотрим на примере хостинга Timeweb, как его включить.

Подключаемся к серверу через SSH. Можно использовать консоль в панели управления Timeweb.

Переходим в папку cd-bin сайта:

Создаем символическую ссылку командой:

Остаемся в директории cgi-bin и копируем файл php.ini:

Добавляем в файл .htaccess сайта две строки:

Теперь мы можем управлять параметрами PHP директивами в файле php.ini. Он находится в папке cgi-bin. Открываем его и вставляем в конце следующие строки:

Если указанный порт занят, укажите другой. Можно использовать стандартный для Xdebug — 9000. В качестве idekey я указал VSCODE. Если будете настраивать конфигурацию для PHPStorm, впишите его.

Настройка PHP для Xdebug

Чтобы проверить, работает ли Xdebug, создадим в корне сайта файл Myfile.php со следующим содержимым:

Открываем файл в браузере и проверяем, что все параметры указаны верно.

Организация удаленного подключения

Чтобы выполнять PHP Debug на локальной машине, нужно настроить связь IDE и сервера через SSH-туннель.

На Linux все выполняется парой команд.

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

На Linux туннель создается командой:

На Windows туннель настраивается через утилиту PuTTY.

  1. На вкладке Session указываем имя сервера и номер порта 1024. Проверяем, чтобы был отмечен протокол SSH.
  2. Переходим в раздел Connection — Data. Указываем логин.
  3. Переходим в раздел Connection — SSH — Tunnels. Указываем параметры так, как указано на скриншоте. Номер порта пишем тот, который используется в конфигурации PHP на сервере.
  4. Возвращаемся в раздел Session и нажимаем на кнопку Open. Подтверждаем корректность ключей (только первый раз).

Сессия сохранится под тем именем, которое мы указали в разделе Session. В дальнейшем нужно будет просто запускать ее заново.

Настройка VSCode

Чтобы работать с Xdebug в VSCode, установим два расширения: Sync-Rsync и PHP Debug. Первое нужно для работы с удаленным сервером, второе — для отладки скриптов.

  1. Открываем в VSCode раздел Extensions (можно использовать сочетание клавиш Ctrl+Shift+X).
  2. Находим и устанавливаем расширение Sync-Rsync.
  3. Находим и устанавливаем расширение PHP Debug.

После установки расширений создаем на локальной машине пустую папку и открываем ее через VSCode: «Файл» — «Открыть папку».

Добавляем подпапку .vscode, создаем внутри нее файл settings.json и прописываем в нем настройки для Sync-Rsync.

Путь /home/user/.ssh/id_rsa — это место, где лежит файл с закрытой частью SSH-ключа.

После сохранения файла settings.json нажимаем в VSCode F1, выполняем команду Sync Remote to Local. В локальную папку, указанную в настройках, скопируются все файлы с сервера.

Синхронизация с сервером

Затем нажимаем на иконку отладки и на шестеренку. В папке .vscode появится файл launch.json. В него тоже нужно внести изменения:

На этом настройка IDE завершена. Можно приступать к тестированию кода.

Debug кода

Мы настроили среду, теперь разберемся, как пользоваться Xdebug.

  1. Изменим содержимое файла Myfile.php, который мы создали при подключении отладчика. Добавим в него функцию, которую хотим проверит ь.
  2. Чтобы загрузить измененный файл на сервер, нажимаем на клавишу F1 и выполняем команду Sync-Rsync: Sync Local to Remote.
  3. Открываем файл в браузере и проверяем, что синхронизация работает.
  4. Расставляем в VSCode брейк-пойнты, которые нужны для отладки.

Переходим в режим «Отладка» и проверяем, что выделен пункт Listen for XDebug. Нажимаем на зеленый треугольник или на клавишу F5.

После перезагрузки сайта в браузере возвращаемся в VSCode. В отладчике должны отобразиться глобальные переменные и их значения на момент обработки кода в брейк-пойнте. Вы можете перемещаться по коду, отслеживая изменение переменных на каждом шаге.

Отладчик Xdebug

Профилирование с визуализацией результатов

Чтобы использовать Xdebug profiler на полную мощность, установим WebGrind. Это набор скриптов, который выводит статистику в браузере. С его помощью можно посмотреть список вызванных функций, количество вызовов, общее затраченное время на вызов и выполнение.

  1. Скачиваем WebGrind с GitHub.
  2. Загружаем архив на сервер и распаковываем файлы в корне сайта.
  3. Создаем папку, в которой будут храниться логи.
  4. Добавляем в файл php.ini две директивы:

Затем нужно открыть файл config.php, который находится в распакованной папке webgrind-master. В нем отредактируем две строки:

Функции можно скрывать или раскрывать, чтобы посмотреть развернутую статистику. Инструмент также умеет отображать графы вызова функций — для этого используется режим Show Call Graph.

Вывод: когда использовать Xdebug?

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

XDeubug - это расширение, которое предоставляет продвинутые инструменты по отладке PHP-кода. В этой статье я покажу, как использовать Xdebug, и в чём его преимущество.

XDEЧТО?

Xdebug - это расширение для PHP, которое предоставляет широкие возможности по отладке PHP-приложения. Это расширение позволяет указывать точки остановки (breakpoints), грубо говоря, которые представляют из себя "паузу выполнения" скрипта. Эти breakpoin-ы останавливают выполнение скрипта (в том участке, где было указано), и выводят все текущие доступные данные на момент остановки (переменные и их значения, классы, куки, сессии, и т.д.).

Xdebug полностью исключает необходимость в использовании monkey-дебага, типа:
Почему это удобнее?
Во-первых, breakpoint-ы, ставить проще и быстрее.
Во-вторых, такой структурированной и полной информации не добиться ни от какой из существующих debug-функций.
А в-третьих, используя это расширение, можно менять значения любых переменных налету, изучая влияние новых значений на приложение в целом.

Поддержка в IDE и текстовом редакторе

Большинство современных IDE без проблем поддерживают xdebug. Настройка индивидуальна, в зависимости от выбранной IDE (возможно, потребуется дополнительная установка плагинов). Например, в SublimeText, Netbeans, или даже в Notepad++ предоставляются возможности по использованию дебаггера.

Моя любимая IDE уже имеет встроенную поддержку xdebug-а. Потому, настройка здесь ещё проще, чем хотелось бы.
По правде говоря, лучше IDE, чем PhpStorm, я пока не встречал, и именно про такие программы говорят: "она стоит каждого своего цента". Потому, я советую в разработке использовать именно её. Потому, все скриншоты будут исключительно из PhpStorm-а.

Установка XDEBUG

Установка в разных операционных системах отличается. Я же использую windows, openserver. Потому, продемонстрирую пошаговую инструкцию установки xdebug на openserver.

openserverphp-ini-2

Заходим в php.ini

xdebug-php-1

Находим меню [Xdebug]

В котором, ищем, и устанавливаем параметры (в основном они закомментированы, потому, нужно раскомментировать их, удалив в начале ; ):

xdebug-phpinfo

Сохранив изменения, перезагрузив сервер, и вызвав phpinfo() можно убедиться, что xdebug появился, и стал доступным с указанными ранее параметрами.

Теперь, из серверных настроек всё котово. Осталось сделать так, чтобы можно было вызвать дебаггер из браузера. Ранее всё было сложнее, однако, сейчас всё сводится к установке одного расширения google chrome Xdebug helper.

Настройка PHPSTORM

phpstorm-index-2

Для настройки IDE нужно перейти в меню File | Settings | Languages & Frameworks | PHP | Debug , где указать ранее указанный порт, равный 9000, и запустить "прослушку"

phpstorm-odekey

И, аналогично, в File | Settings | Languages & Frameworks | PHP | Debug | DBGp Proxy нужно указать IDE KEY, и порт:

client

И, готово. Теперь скрипт полностью готов к дебагу. Для проверки, я создал новый домен xdebug.loc . Перейдя по адресу проекта, в панеле расширений, можно заметить новую иконку, открыв которую, и активировав Debug , страница начнёт прослушку:

Первый breakpoint

xdebug-breakpoint-1

Теперь осталось написать код, и поставить в нём точку остановки. Сделать это просто: достаточно, напротив строки, на которой предполагается остановка, нажать на пустом месте, расположенном скраю.

xdebug-phpstorm-index

И, если всё было настроено правильно, то, открыв текущий проект в браузере, увидим постоянно загружающуюся страницу. А в IDE, одновременно с этим, откроется окно, со всеми доступными параметрами отладки. Вот так и выглядит xdebug панель отладки в PhpStorm:

Детальный разбор debug-панели

Рассмотрим отладку на примере исходного кода:

function-breakpoint

Поставив, один breakpoint на строке начала цикла for , изучим возможности отладки.

pannel-debug

Панель имеет несколько функциональных кнопок управления процессом отладки

Где F9 - Resume Program, при клике на которую продолжается выполнение скрипта до следующей точки остановки, или до конца скрипта, если дальше breakpoint-ы не заданы.
Ctrl + F2 - останавливает отладку, и обрывает выполнение скрипта, на текущем моменте. Аналогично, выполнению функции die .
F8 - переходит на следующую строку текущего PHP-файла. Не заходя внутрь вызываемых функций и методов.
F7 - переходит на следующую строку PHP-файла. В отличии от F8 , проходит по полному стёку вызовов, и переходит в сами функции и методы, которые были вызваны. И, даёт больше информации, в виде отображение локальных данных функций
Блок 1 - показывает полный стёк вызовов, который был пройдён до текущего момента остановки. Здесь можно увидеть вызов всех методов/функций, количество рекурсивных вызовов, и их подробности, с возможностью перехода в то место, откуда это было произведено.
Блок 2 - показывает все доступные переменные на момент текущего breakpoint-a. При переходе на следующий breakpoint, этот список будет изменяться и дополняться, постепенно с выполнением кода. Кликнув правой кнопкой мыши, можно задать любое значение переменной (Set Value), которое будет влиять на остальной код, использующий эту переменную.

Если поставить breakpoint в цикле, то остановка будет срабатывать на каждой его итерации, а не один раз за весь цикл

green_bar

Если выполнить ранее написанный код, то можно попрактиковаться, используя разные режимы навигации:
F9 - обычный режим перехода

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

2steps-bar

F8 - построчный вывод кода, без углубления в вызов функций ,

recurs-block

F7 - построчный вывод кода, с проходом по стёку функций ,

Теперь, можно отследить весь путь выполнения кода (аналогично интерпретатору), и отследить, как локальные переменные функции, так и глобальные для всей системы.

Отладка чужих проектов

Перед тем, как закончить этот туториал, я хотел бы описать одну очень распространённую проблему при выполнении проектов.
Есть много проектов, которые написаны в виде одного большого полотна кода. Понять логику которого очень сложно. Потому, единственным правильным решением будет вызов xdebug-а с первой строки, и осуществление навигации с помощью рассмотренных выше функций (F8, или F7), построчно изучая логику работы приложения.

Поверьте, но продвинутое знание xdebug-а очень сильно упрощает жизнь программиста

Резюме

Сегодня вы изучили, что такое xdebug, как установить xdebug на open server, и как работать с xdebug в PhpStorm.

Я надеюсь, что этот туториал убедил вас в том, что xdebug лучше, и гибче обычных echo , var_dump , или print_r . При том, что понять, как с ним работать можно быстро, а пользу, которую принесёт его понимание, можно извлечь колоссальную.

Читайте также: