Отладка с помощью xdebug в PhpStorm

01.06.2020

Теги: IDEPHPWeb-разработка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

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.