Xdebug и VIM

Доброе время суток участники образовательной IT площадки GeekSpace. Меня зовут Юрий Сиротенко и сегодня в данном конспекте мы поговорим о средстве профилирования и отладки PHP скриптов Xdebug в рамках свободного текстового редактора VIM

Настоящий конспект можно в полной мере считать практическим, так как на нем я не буду объяснять что такое Xdebug и VIM, а лишь покажу как использовать ранее упомянутый отладчик в оговоренном редакторе.

В данном конспекте я не буду рассказывать о том как установить и сконфигурировать Xdebug и VIM, предполагается, что слушатель предварительно установил нужный набор инструментов и хочет научиться использовать отладчик в текстовом редакторе VIM.

Сразу хотелось бы сказать что для взаимодействия Xdebug с VIM мы не будем писать свое собственное расширение, а воспользуемся уже существующим Open Source плагином

В конце конспекта вы сможете получить методическое пособие, презентацию, а также дополнительные материалы к изучению касающиеся данной темы. Давайте пожалуй приступим!

Введение

Как было сказано ранее, для взаимодействия Xdebug с текстовым редактором VIM будет использовано Open Source расширение имя которого “DBGp-Remote-Debugger-Interface”

Установка

Для начала давайте склонируем расширение для VIM

git clone https://github.com/vim-scripts/DBGp-Remote-Debugger-Interface.git

Затем в корневой директории пользователя найдем папку “.vim” и создадим в ней директорию “plugin”

mkdir ~/.vim/plugin

Переместим все файлы плагина в ранее созданную директорию

cp -R DBGp-Remote-Debugger-Interface/plugin/* ~/.vim/plugin/

Готово. Плагин успешно установлен.

Конфигурирование

Хотя расширение и готово к работе давайте переопределим глобальную переменную отвечающую за порт, на который завязан xdebug. Перейдем в конфигурационный файл “.vimrc”, который находится в корневой директории пользователя. Если данного файла не существует - необходимо создать его. Добавим туда следующую директиву.

let g:debuggerPort = 9001

Я поставил значение 9001 дабы избежать конфликта портов. Как правило порт используемый XdebugОм по умолчанию - это 9000 и он уже используется PHP-FPM.

Раз мы уже затронули тему конфигурирования плагина, давайте еще немного перенастроим плагин

Откроем файл `~/.vim/plugin/debugger.vim` в текстовом редакторе

vim ~/.vim/plugin/debugger.vim

По умолчанию Xdebug расширение для VIM настроено таким образом, что время ожидания сокета составляет 5 секунд, иначе говоря интервал ответа между шагами должен составлять не более 5 секунд. Если PHP скрипт не ответит в рамках этого времени, то отладчик прекратит свою работу.

В моей практике я встречаю некоторые скрипты, которые могут выполняться более 5 секунд. Порой это такие скрипты, которые синхронно ожидают ответа от внешних сервисов. Именно для таких случаев существует директива “debuggerTimeout”. Давайте прочитаем комментарий

to set the socket waiting time before timeout(default 5 second) use :

let g:debuggerTimeout = 10

above snippet use 10 second

Вернемся в конфигурационный файл нашего редактора и переопределим данную директиву. Выставим значение в 30 секунд

let g:debuggerTimeout = 30

Также в работе мне приходится отлаживать скрипты где фигурирует большая вложенность структуры данных массив. Но дело в том, что по умолчанию движок отладчика может возвращать вложенность равную одному, что крайне не удобно

Благодаря директиве “debuggerMaxDepth” мы можем скорректировать это значение. Комментарий звучит следующим образом

g:debuggerMaxDepth (default 1): The maximum depth that the debugger engine may return when sending arrays, hashs or object structures to the IDE.

Снова вернемся в конфигурационный файл VIM и переопределим эту опцию

let g:debuggerMaxDepth = 10

Эксплуатация

Теперь мы можем приступать к формированию простенького PHP скрипта который складывает два числа дабы проверить работоспособность отладчика

<?php

// example.php

$x = 1;
$y = 2;

$res = $x + $y;

echo "$res\n";

Переведем курсор на восьмую линию и поставим break point при помощи команды

:Bp

Как видим строка была подсвечена зеленым цветом. Теперь необходимо нажать функциональную клавишу “F5”. В результате отобразится следующее сообщение

waiting for a new connection on port 9001 for 10 seconds…

Xdebug был запущен и ожидает соединения. Давайте запустим скрипт при помощи терминала в отдельной вкладке

php example.php

Теперь вернемся в редактор VIM и увидим следующее уведомление о том, что соединение было получено от машины с ip адресом 127.0.0.1

connection from ('127.0.0.1', <id>)
Press ENTER or type command to continue

Для того чтобы начать дебаг нужно нажать клавишу ENTER.

Отладка нашего мини приложения началась. Теперь мы можем отслеживать выполнение программы поэтапно, то есть в рантайме. Давайте более подробнее остановимся на рабочей области отладчика

  • Отладочная рабочая область была сформирована плагином в новой вкладке. Когда отладка будет завершена, вкладка автоматически закроется.
  • Текущий отладочный шаг подсвечивается красным цветом, а с краю слева можно увидеть символ “->”
  • Точка останова подсвечивается зеленым цветом, а с краю слева можно увидеть символ “B>”
  • Верхнее правое окно отображает отладочную информацию, например содержимое переменных
  • Среднее окно справа является своего рода памяткой со списком команд для осуществления отладки программы
  • Нижнее окно справа отображает маршрут выполнения программы

Для того чтобы перейти к следующему шагу отладки нужно нажать клавишу “F3”

Как видим мы шагнули на 6 строку. Чтобы осуществить прыжок сразу на точку останова избежав промежуточные этапы, необходимо нажать клавишу “F4”

Снова нажмем “F3” чтобы перейти к следующему шагу отладки

Чтобы узнать, какое значение в данный момент находится в переменной “$res”, переведем курсор на переменную “$res” и нажмем функциональную клавишу “F12”

В окне “WATCH_WINDOW” запишется информация о значении переменной “$res”

Xdebug автоматически закончит отладку когда вы дойдете до конца скрипта. Если возникнет необходимость прекратить отладку принудительно, необходимо нажать клавишу “F6”

Заключение

В своей профессиональной практике я использую текстовый редактор VIM и практический каждый день произвожу отладку программ при помощи Xdebug.

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

Дополнительные материалы

 

Информация

Автор конспекта


Дата создания: 17.08.2019
Категория: PHP