Перейти к основному содержанию

Visual Studio Code — remote Xdebug

Xdebug

Visual Studio Code — кроссплатформенный открытый редактор кода, разработанный компанией Microsoft. Бесплатный.

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

https://code.visualstudio.com

Xdebug — расширение PHP для профилирования и отладки PHP-скриптов. Работает по протоколу DBGp.

Эта полезная утилита помогает разработчикам PHP упростить отладку PHP-скриптов с помощью точек останова, пошагового выполнения и отслеживания выражений. А ещё лучше делать это удалённо, из дома.

https://xdebug.org

Сегодня мы с вами настроим удалённую отладку PHP на Visual Studio Code с помощью Xdebug. Разработчик сможет из дома удалённо подключаться к сайту и дебажить код во все брек-поинты. Разработчику понадобится дома прямой IP адрес.

Краткая схема взаимодействия

  • На удалённом сайте устанавливается и настраивается Xdebug — расширение для PHP.
  • Разработчик запускает свою любимую IDE, в нашем случае Visual Studio Code, конфигурирует, ставит необходимые плагины, в том числе для браузера.
  • Разработчик открывает в браузере сайт, включает дебаг, и сервер сам коннектится по указанному в настройках порту на домашний IP адрес разработчика.
  • Разработчик дебажит код.

Установка Xdebug на сервере

Не будем подробно останавливаться на установке расширения PHP, на сайте разработчика есть инструкции. Для Ubuntu:

apt-get install php-xdebug

https://xdebug.org/docs/install

Настроить ещё надо

vim /etc/php/7.4/cli/conf.d/99-xdebug.ini
[xdebug]
zend_extension="<путь к расширению xdebug>"
xdebug.mode=debug
xdebug.client_host=<домашний IP адрес разработчика>
xdebug.discover_client_host = true
xdebug.client_port=9000

https://xdebug.org/docs/all_settings

Если разработчиков несколько, или IP адрес дома плавающий, то можно обратить внимание на опцию xdebug.discover_client_host, которая позволяет отвечать всем, кто делает запрос. Но это небезопасно.

Буду использовать порт 9000.

Установка Visual Studio Code

Visual Studio Code

Устанавливаем.

xdebug

Установка расширений для Visual Studio Code

Находим расширение PHP Debug.

ctf

Устанавливаем, Install.

xdebug

Тыкаем слева в иконку с жуком.

ctf

Написано:

To customize Run and Debug, open a folder and create a launch.json file.

Я работаю в Windows 10, создаю для проекта папку C:\CTF, открываю её в VSCode.

xdebug

Возвращаюсь к кнопку с жуком.

ctf

Написано:

To customize Run and Debug create a launch.json file.

Нажимаю на ссылку для создания файла.

xdebug

В проекте создаётся файл launch.json с примером настроек. в элементе JSON массива с параметром "name": "Listen for Xdebug" находим параметр "port" и меняем его значение на 9000.

Слева вверху в блоке RUN AND DEBUG выбираем из списка "Listen for Xdebug" и нажимаем зелёный треугольник для запуска.

xdebug

Открывается оповещение безопасности. Ставим галки для всех сетей (вам лучше знать какие выбрать). Разрешить доступ.

xdebug

VSCode начинает слушать порт TCP 9000.

Останавливаем дебаг. Нажимаем красный квадрат (Stop).

Проброс порта

Для того чтобы сервер достучался до порта 9000 на моём компе (а сегодня я за разработчика PHP), нужно на роутере пробросить порт 9000 с внешнего прямого IP адреса на порт 9000 локального компьютера.

ipconfig

xdebug

Локальный IP у меня 192.168.1.105.

ctf

Пробрасываю на него порт 9000 с внешнего IP.

Расширение для браузера

Работать будем в браузере Edge.

ctf

Устанавливаем расширение Xdebug helper.

ctf

Заходим на наш сайт, На иконке расширения выбираем зелёного жука Debug.

xdebug

Настройка конфигурации

Редактируем launch.json.

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "remote XDebug",
            "type": "php",
            "request": "launch",
            "hostname": "0.0.0.0",
            "port": 9000,
            "log": true,
            "stopOnEntry": true,
            "pathMappings": {
                "C:\\ctf": "${workspaceFolder}"
            }
        }
    ]
}

Поясню некоторые моменты.

  • "name": "remote XDebug" — название, именно эту опцию будем выбирать для дебага слева вверху в блоке RUN AND DEBUG
  • "hostname": "0.0.0.0" — на локальном компьютере будем прослушивать порт на всех интерфейсах
  • "port": 9000 — порт, на который нам будет отправлять пакеты удалённый сервер с сайтом
  • "stopOnEntry": true — останавливаться на первой точке останова
  • "log": true — выводить подробный лог в консоль
  • "pathMappings": { "C:\\ctf": "${workspaceFolder}" } — здесь C:\ctf: папка с проектом. По идее здесь должен находиться такой же код, как на сервере. Но не обязательно, это зависит от того, для чего мы всё это настраиваем. Слеш экранируется.

xdebug

Разворачиваем вкладку BREAKPOINTS слева внизу и ставим галки на всех типах точек останова.

Проверка

Слева вверху в блоке RUN AND DEBUG выбираем теперь из списка "remote XDebug" и нажимаем зелёный треугольник для запуска. Или F5.

Обновляем окно браузера.

xdebug

Опа, мы попали на точку останова. Скажем что-нибудь в консоли по PHP-шному:

phpinfo();

xdebug

Команда выполнилась. Посмотрим в браузер.

xdebug

Мы не только попали на точку останова, но и смогли удалённо выполнить команду PHP.

Возможные ошибки

Не поставили галки на типах точек останова.

Cannot evaluate code without a connection

Это логично, если нигде не остановиться, то страница полностью загрузится, не учитывая точки останова, которые есть на сервере.

ctf

Не указали опцию "stopOnEntry": true.

Cannot evaluate code without a connection

Вход в режим дебага при каждом запуске скрипта.

xdebug

Заключение

Я не разработчик PHP, при этом легко справился с установкой и настройкой инструментов для удалённой отладки PHP помощью Xdebug в IDE Visual Studio Code.

Если у PHP разработчика нет прямого IP адреса, то можно сделать SSH-туннель к удалённому серверу с помощью командной строки на локальной машине.

ssh -R 9000:localhost:9000 <username>@<host> -p <port>

Для отладки нет необходимости загружать все файлы проекта. Достаточно загрузить только те файлы, которые нужны для отладки. Я в примере вообще ничего не выгружал, просто продемонстрировал возможность удалённого выполнения PHP кода на отлаживаемой системе.

Xdebug + VSCode = ??

Теги

 

Похожие материалы