Отладка с помощью 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