Отладка с помощью xdebug в PhpStorm
01.06.2020
Теги: IDE • PHP • Web-разработка • Windows • Конфигурация • Настройка • Отладка • Сервер • Установка
Установка отладчика
Выяснить, какое именно расширение xdebug надо скачать, поможет страница xdebug.org/wizard. Копируем html-код вывода функции phpinfo() и вставляем в поле формы. После отправки формы получаем такой вывод и инструкции по установке:
Summary
Xdebug installed: no
Server API: CGI/FastCGI
Windows: yes - Compiler: MS VC 15 - Architecture: x64
Zend Server: no
PHP Version: 7.2.33
Zend API nr: 320170718
PHP API nr: 20170718
Debug Build: no
Thread Safe Build: yes
OPcache Loaded: no
Configuration File Path: C:\WINDOWS
Configuration File: D:\work\localhost25\php.ini
Extensions directory: C:\wamp\php72\ext
Instructions
1. Download php_xdebug-2.9.6-7.2-vc15-x86_64.dll
2. Move the downloaded file to C:\wamp\php72\ext
3. Edit D:\work\localhost25\php.ini and add the line
zend_extension = C:\wamp\php72\ext\php_xdebug-2.9.6-7.2-vc15-x86_64.dll
4. Restart the webserver
Копируем расширение в директорию ext, добавляем в файл php.ini строки
[xdebug] ; расширение xdebug для отладки кода zend_extension=C:/wamp/php72/ext/php_xdebug-2.9.6-7.2-vc15-x86_64.dll ; включить xdebug — при возникновении ошибки стандартный вывод сообщения ; об ошибке будет заменен на стек вызовов, который привел к этой ошибке xdebug.default_enable=1 ; попытаться связаться с клиентом отладки, который прослушивает хост ; remote_host и порт remote_port; если не получилось связаться, скрипт ; просто продолжит работу, как если бы этот параметр был равен нулю xdebug.remote_enable=1 ; хост, на котором работает клиент отладки xdebug.remote_host=localhost ; порт, на котором работает клиент отладки xdebug.remote_port=9999 ; протокол для обмена информацией с клиентом xdebug.remote_handler=dbgp ; разрешить автоматический запуск отладки xdebug.remote_autostart=1 ; глубина показа дампа массивов и объектов xdebug.var_display_max_depth=6 ; в случае возникновения ошибки стек вызовов будет включать ; все локальные переменные в самой внешней области видимости xdebug.show_local_vars=1 ; включает усовершенcтвованный var_dump xdebug.overload_var_dump=1
Проверяем вывод функции phpinfo(), чтобы убедиться, что расширение подключено
В PhpStorm настройки отладчика находятся на вкладке File → Settings → Languages & Frameworks → PHP → Debug
Здесь нужно задать порт, который мы указали в файле php.ini (у меня это 9999).
Работа с отладчиком
Поскольку с помощью remote_autostart мы указали автоматически запускать отладку — нам достаточно в PhpStorm нажать иконку «Start Listening» и задать точку останова — при запросе любой страницы сайта выполнение остановится в этой точке.
В панели отладчика доступны несколько кнопок, назначение которых сейчас рассмотрим.
Step Over
Если следующая строка, которая будет выполнена, является вызовом фунции или метода класса — перешагнуть через вызов (выполнив код функции или метода) — и останавиться на следующей строке кода.
Step Into
Если следующая строка, которая будет выполнена, является вызовом фунции или метода класса — перейти внутрь этой функции или метода — и остановиться на первой строке функции или метода.
Force Step Into
Некоторые скрипты, функции и методы пропускаются Step Into, какие именно — можно посмотреть на вкладке File → Settings → Build, Execution, Deployment → Debugger → Stepping. Кнопка Force Step Into позволяет обойти эту настройку и все-таки войти внутрь скрипта, функции или метода.
Step Out
Выйти из текущей функции или метода и вернуться к месту вызова. Тут все просто — вошли с помощью Step Into, посмотрели — вышли.
Run To Cursor
Выполнять код, пока не будет достигнута позиция курсора — и в этом месте остановиться.
Отладка через прокси
При запуске сеанса отладки, расширение xdebug подключается к ip-адресу, на котором работает PhpStorm, указанному в опции remote_host. PhpStorm принимает это соединение и может общаться с xdebug через него. Расширение xdebug поддерживает подключение только к одному ip-адресу и не подключается автоматически к ip-адресу, на котором работает браузер. Для отладки php кода несколькими разработчиками xdebug предлагает так называемый прокси DBGp.
Когда используется прокси, расширение xdebug больше не подключается к PhpStorm напрямую, а вместо этого подключается к прокси-серверу DBGp. Все разработчики в команде по очереди подключаются к этому прокси. У каждого разработчика есть отдельный сеанс отладки, выполняемый через этот прокси-сервер, что позволяет выполнять многопользовательскую отладку одного и того же кода на одном сервере.
Итак, потребуется прокси DBGp, работающий на машине, к которой может получить доступ как сам веб-сервер, так и все компьютеры разработчиков. Чаще всего прокси запускают на той же машине, на которой работает веб-сервер. Исполняемый файл прокси DBGp принимает два основных аргумента:
-s— порт для прослушивания соединений отладчика (сервер)-i— порт для прослушивания подключений IDE (клиент)
Для примера, запустим прокси который прослушивает соединения отладчика на ip-адресе 127.0.0.1 и порту 9001, и слушает разработчиков по ip-адресу 192.168.99.1 и порту 9000.
> dbgpProxy.exe -s 127.0.0.1:9001 -i 192.168.99.1:9000
После этого каждый разработчик должен зарегистрировать свой уникальный ключ IDE на прокси — Tools → DBGp Proxy → Register IDE
Кроме того, каждый разработчик должен установить расширение Xdebug helper для браузера Chrome и указать в настройках свой уникальный ключ IDE:
Все это более подробно можно прочитать здесь.
Поиск: IDE • PHP • Web-разработка • Windows • Конфигурация • Настройка • Отладка • Сервер • Установка • Debug




