суббота, 29 октября 2016 г.

Отладка кода в Vim с помощью плагина Vdebug

Для текстового редактора Vim есть замечательный плагин Vdebug, позволяющий работать с xDebug. Хорошая подробная документация доступна прямо в репозитории. Кроме того, можно изучать документацию не выходя из Vim. Если вы установили Vim читая статью Установка плагина для Vim с помощью pathogen.vim, вы можете сгенерировать документацию командой :helptags ~/app-root/data/vim/bundle/vdebug/doc/. Команда :help Vdebug отображает документацию.

Запуск отладчика осуществляется клавишей <F5>, после чего, отладчик будет ждать входящие подключения. Разберем отладку на примере WordPress.

1. Откройте файл ~/app-root/data/current/wp-settings.php
2. Установите точку остановки, нажав клавишу <F10>, например, здесь:
if ( is_multisite() )
      ms_cookie_constants();

// Define constants after multisite is loaded.
wp_cookie_constants();

3. Запустите отладчик клавишей <F5>. Вы увидите сообщение Waiting for a connection (Ctrl-C to cancel, this message will self-destruct in  20  seconds...)
4. Откройте ваш блог в браузере

Vdebug остановится на первой строке в файле index.php. Нажмите <F5> еще раз. Как мы видим, vdebug перешел к нашей точке остановки.

Отладчик Vdebug в работе

Окно DebuggerWatch показывает переменные на момент остановки. Они отображаются в виде дерева, чтобы иметь возможность показать объекты и массивы. Чтобы свернуть/развернуть ветвь , нажмите <enter> (<cr>).
Чтобы посмотреть глобальные переменные, установите курсор на слово Superglobals и нажмите <enter> (<cr>).

Окно DebuggerStack показывает стек (файлы, функции, методы) через которые прошла программа чтобы оказаться в текущей ([0]) позиции. Вы можете перемещаться по стеку с помощью клавиши <enter> (<cr>) - участок кода откроется в окне слева.

Окно DebuggerBreakpoints скрыто по умолчанию. Выполните команду :BreakpointWindow чтобы его отобразить.

Основные команды

  • <F5>: Run (запуск/переход к следующей точке остановки или концу программы)
  • <F2>: Step over (выполнение команды, не входя в функции и подключаемые файлы)
  • <F3>: Step in (выполнение команды, входя в функции и подключаемые файлы)
  • <F4>: Step out (выход назад из функции или подключаемого файла)
  • <F6>: Stop/close (остановить отладку и программу, двойное нажатие также скрывает интерфейс отладчика)
  • <F7>: Detach (отключить отладчик и продолжить выполнение программы)
  • <F9>: Run to cursor (выполнить весь код до курсора)
  • <F10>: Toggle breakpoint (установить/снять точку остановки)
  • <F11>: Show context variables (показать контекстные переменные после выполнения выражения)
  • <F12>: Evaluate variable under cursor (получить значение переменной под курсором)


Точки остановки

Есть несколько типов точек остановки:
  • Line (остановка на строке в файле). Устанавливается клавишей <F10>, или командой :Breakpoint
  • Conditional (остановка на строке в файле если условие истинно). Устанавливается командой :Breakpoint conditional <condition>, например, :Breakpoint conditional $a==5
  • Exception (остановка при выбросе исключения). Устанавливается командой :Breakpoint exception <exception-name>, например :Breakpoint exception PDOException
  • Call (остановка при вызове функции). Отладчик остановится на первой строке в функции. Устанавливается командой :Breakpoint call <function-name>, например, :Breakpoint call open_file
  • Return (остановка при возврате значения из функции). Отладчик остановится на слове return. Устанавливается командой :Breakpoint return <function-name>, например, :Breakpoint return open_file


Выполнение выражения

Вы можете выполнить выражение в текущем контексте выполнения программы и отобразить его значение в окне DebuggerWatch:
  • выполнив команду :VdebugEval $variable + 5, вы получите ответ. Здесь мы прибавляем 5 к уже определенной в коде переменной
  • чтобы продолжить отображать значение выражения и обновлять его в ходе выполнения программы в окне DebuggerWatch, выполните команду :VdebugEval! $variable + 5. Здесь мы прибавляем 5 к уже определенной в коде переменной. Чтобы выйти из этого режима, выполните команду :VdebugEval!
  • установив курсор на переменную, и нажав <F12>, вы получите ее значение

Клавиша <F11> позволяет отобразить контекстные переменные вместо результата выполнения выражения.




Комментариев нет:

Отправить комментарий