Phpstorm xdebug index php

Отладка с помощью XDebug и PhpStorm (дополнение)

Прочитал сегодня статью «Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс». В ней автор использует «зеленого жука» для запуска отладки. В комментариях предложены еще несколько методов запуска отладки, такие как специальные закладки, различные плагины и т.д. На мой взгляд, все это неудобно, к тому же есть наиболее простой и удобный вариант. Я мог бы предложить его в комментариях к статье, но, увы, в read-only это невозможно. Посему вынужден писать отдельную статью.

У xdebug есть возможность автостарта, без всяких премудростей. Достаточно просто расставить breakpoint’ы и открыть Ваше приложение в браузере, xdebug будет подхватывать старт сам.

1. Настройка XDebug
zend_extension="%путь до php%/ext/php_xdebug.dll" ;эта опция как раз и отвечает за автостарт xdebug.remote_autostart=on xdebug.remote_enable=on xdebug.remote_handler="dbgp" xdebug.remote_host="localhost" ;порт может быть и 9000, но у openserver он зарезервирован под php xdebug.remote_port=9001 xdebug.remote_mode=req ;ключ IDE (может быть любым) понадобится позже xdebug.idekey="PHPSTORM" 
2. Настройка PhpStorm

Настраиваем интерпретатор, если у вас это еще не сделано.

image

image

Далее добавляете сервер, если вы сервер локальный, то пишете в поле Host — localhost, если удаленный то адрес удаленного хоста. Имя хоста здесь и в php.ini должно совпадать.

image

Настраиваем XDebug. Порт берем из php.ini (xdebug.remote_port). Если вам не нужно чтобы XDebug останавливался на первой строчке приложения, отключаем два нижних чекбокса.

image

Здесь значения так же берем из php.ini: IDE key -> xdebug.idekey, Host -> xdebug.remote_host, Port -> xdebug.remote_port.

image

На этом настройка завершена, можно пользоваться.

Использование

Для начала работы расставляете breakpoint’ы, включаете прослушку порта XDebug и открываете ваше приложение.

image

image

Breakpoint’ы будут ловиться автоматически, без необходимости тыкать в «зеленого жука». Надеюсь информация кому-нибудь пригодится.

На этом все, спасибо за внимание.

P.S. Статья уже около года висела в песочнице, но до сих пор актуальна, поэтому публикую ее. Спасибо jeston за приглашение.

Источник

Отладка PHP 8 с помощью Xdebug 3 в PHPStorm

loader

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

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

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

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

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

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

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

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

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

xdebug.mode = develop,debug xdebug.client_host = "localhost" xdebug.client_port = 9003

Конфигурация 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

Ставим галочку напротив пункта «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. Это приведет к тому, что программа продолжит выполнение до следующего брэйкпоинта (да, их можно наставить сколько угодно). Если их больше не встретится (как в нашем примере), то программа просто завершит свою работу.

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

 function getSumOfCos(float $x, float $y) < $cosX = cos($x); $cosY = cos($y); return getSum($cosX, $cosY); >echo getSumOfCos(1.44, 2);

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

И установим два брэйкпоинта на строках 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().

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

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

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

 numbers($x - 1); echo ', ' . $x; > numbers(3);

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

Поставим брэйкпоинт на 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 и наблюдайте за ходом выполнения программы. Надеюсь теперь рекурсия для вас понятна =)

Источник

Xdebug в PhpStorm видит только index.php. Что делать?

Проект размещен локально. index.php точка входа.
Мэпинг вроде включил. папку выбрал. не понимаю. что делать. не сплю второй день помоги пожалуйста.

Простой 9 комментариев

Maksclub

Максим Федоров, я прошёл все инструкции до которых дотянулся в интернете уже 18 раз. Что мне скинуть чтобы вам помогло помочь мне?

Maksclub

для начала опишите ваше окружение (ОС (в том числе укажите — на виртуалке или Докере, если есть такое), сервер, версия PHP), ну и можно скрины настроек привести.

mac os. виртуальный хост на апаче2. php7.2
php.ini
5c80f13143abd570124676.png
Xdebug
5c80f14a1bd68723947768.png
PhpStorm который видит только переменные index.php
5c80f16869441508141919.png
настройки(я пробовал в хост писать и localhost и адрес домена, результат один)
5c80f19bd0a0f149927439.png

5c80f3a869c92249362637.png

валидацию Xdebug проходит в PhpStorm

в браузере у меня стоит Xdebug helper

Источник

Читайте также:  Размеры текстового поля
Оцените статью