Настраивать xdebug для первого запуска не нужно вообще! Как в Phpstorm запустить отладку за минуту и без браузера

от автора

Многие считают, что добиться успешного запуска отладки xdebug после его установки — тяжело и мучительно. Но на самом деле, сделать первый запуск можно менее чем за минуту, не делая настройку и даже не прикасаясь к конфигурационным файлам .ini (php.ini/xdebug.ini). Как это сделать? Об этом и пойдет речь в этой статье.

В чем же фокус?

Есть два вида отладки php — отладка Web-приложения, и отладка CLI-скрипта. При первом варианте отладка запускается через браузер, и это тот вариант, которым пользуется большинство людей, и которому посвящены почти все мануалы. В данном случае действительно нужно танцевать с бубнами делать настройку. При втором же варианте, php-скрипт запускается напрямую в IDE (она запустит его в консоли, но уже без вашего участия).

Так вот, нас интересует второй вариант, поскольку его ключевое отличие от первого состоит в том, что всякие там директивы (по типу xdebug.client_host), не нужно прописывать в файле xdebug.ini и где-бы то ни было еще, они передаются в момент запуска динамически, а IDE заполняет их автоматически. Все что вам нужно после установки xdebug — это создать конфигурацию PHP Script в Phpstorm, подключить к ней интерпретатор, а к нему прописать подключение xdebug в поле Debugger Extension — его значение пойдет в директиву zend_extension (как заполнять — смотреть тут, пункты 2 и 4), и не забыть нажать Reload phpinfo.

А дальше просто нажимаем кнопку запуска, и запускаем отладку без танцев с бубнами

Вариант без ручного создания конфигурации PHP Script

Нужно указать интерпретатор дефолтным для проекта (предполагается, что подключение xdebug там уже прописано):

И тогда можно просто запустить отладку текущего открытого файла:

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

Кстати, что интересно, в большинстве мануалов по настройке xdebug (например тут), подключение интерпретатора является обязательным пунктом, хотя по факту это лишнее действие — так как в итоге запускается web-отладка.

Данный вариант подходит как для локальных подключений, так и для удаленных (SSH), и для Docker тоже — интерфейс Phpstorm позволяет подключать интерпретатор из всех вышеперечисленных источников.

Вероятность успешного запуска с первой попытки высокая, но не 100%

Например, если на сервере закрыты порты отладки 9000/9003, то отладка не запустится. В таком случае нужно будет пробросить SSH- туннель:

ssh -R 9003:localhost:9003 username@host-ip

А также установить в настройках интерпретатора директиву xdebug.client_host cо значением localhost.

Также есть баг Phpstorm, что отладка не запускается, если Phpstorm установлен в Program Files, а не в папке пользователя (C:\Users\UserName\AppData\Local\Programs\PhpStorm). В таком случае SSH-туннель тоже должен помочь, ну или же переустановить Phpstorm в нужную папку.

А для запуска web-отладки все по-прежнему?

Ну во первых она вам может и вовсе не пригодиться, если вам нужно отлаживать не все web-приложение целиком, а отдельный скрипт. А во вторых, если нужна отладка все таки приложения, то настраивать конфигурацию конечно придется, но если вам до этого удалось успешно запустить отладку CLI-скрипта, то и с web-отладкой вам будет намного проще. Это как все тот же Hello World, но в мире дебага — как только получилось его запустить, то половина дела (а то и больше) уже сделана.

Расписывать настройку для Web-отладки не буду, так как об этом есть и так достаточно мануалов. Мне они к тому же обычно и не пригождаются, я просто помню о том, что:

  1. На стороне сервера нужно заполнить хотя бы минимальную конфигурацию в xdebug.ini/php.ini, и после этого перезапустить веб-сервер.

    Пример конфигурации

    Вот пример минимальной конфигурации для удаленной отладки на linux, где не нужно пробрасывать SSH-туннель:

    zend_extension=xdebug xdebug.mode=debug xdebug.discover_client_host=on

    Туннель не нужен, поскольку благодаря директиве xdebug.discover_client_host, автоматически определяется ваш IP-адрес. Но использовать это нужно с осторожностью, потому что отладку тогда сможет запустить любой, кто откроет страницу приложения. Если сервер доступен извне, то безопасней будет все же использовать xdebug.client_host=localhost, и пробрасывать SSH-туннель. Но для первого запуска можно использовать xdebug.discover_client_host.

    Вместо localhost можно захардкодить ваш IP, тогда туннель будет не нужен, но отладку кроме вас никто не сможет запустить. А для Docker и вовсе обычно указывают xdebug.client_host=host.docker.internal.

  2. Должна быть создана и запущена конфигурация PHP Remote Debug, с сервером, в котором будут указаны маппинги, и указанным ключом IDE key (обычно это PHPSTORM, но зависит от браузерного расширения Xdebug).

  3. В браузере должно быть расширение для работы с Xdebug с активированным жуком

Все остальное, о чем пишут в мануалах — подключение CLI-интерпретатора, подключение DBGP-proxy в Phpstorm — необязательно.

Или можно zero debug configuration, но он работает не всегда

В данном случае не нужно создавать конфигурацию PHP Remote Debug. Нужно только заполнить конфиг в ini, а дальше достаточно только включить прослушивание входящий соединений в Phpstorm.

Ну и активировать жука в браузере. И дальше можно в браузере запускать файл/страницу, в котором предварительно была поставлена точка останова.

И бонус

Возможно вы не знали, но в сеансе отладки можно не только смотреть значения переменных, но и выполнять выражения:

Quick Evaluate Expression, вызывается через Alt+Shift+MouseClick либо Ctrl+Alt+F8 (в первом варианте будет автоподчеркивание)

Quick Evaluate Expression, вызывается через Alt+Shift+MouseClick либо Ctrl+Alt+F8 (в первом варианте будет автоподчеркивание)

А также выполнять их в отдельном окне:

Evaluate Expression, вызывается через Alt+F8, но для автоподчеркивания нужно назначить Mouse Shortcut, например Alt+Shift+RightMouseClick

Evaluate Expression, вызывается через Alt+F8, но для автоподчеркивания нужно назначить Mouse Shortcut, например Alt+Shift+RightMouseClick

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Получилось запустить отладку?

10.71% Да3
3.57% Получилось запустить отладку CLI-скрипта, но не получилось запустить web-отладку1
3.57% Не получилось1
46.43% Не пробовал13
35.71% Посмотреть результат10

Проголосовали 28 пользователей. Воздержались 8 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/855700/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *