Показаны сообщения с ярлыком xdebug. Показать все сообщения
Показаны сообщения с ярлыком xdebug. Показать все сообщения

суббота, 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> позволяет отобразить контекстные переменные вместо результата выполнения выражения.




среда, 26 октября 2016 г.

Удаленная отладка с Xdebug в Sublime Text

Перед выполнением данного урока, ознакомьтесь с системой контроля версий git.

Xdebug позволяет отлаживать код на удаленном севере без установки самого Xdebug на локальной машине. Используемый при этом протокол носит название DBGp и поддерживается во многих текстовых редакторах и Integrated Development Environments (IDE, Интегрированная среда разработки), в том числе в Sublime Text. Мы рассмотрим отладку кода, исполняемого на сервере OpenShift - Platform as a Service (PaaS, "платформа как услуга") от Red Hat.

Создание PHP приложения в OpenShift

1. Создайте аккаунт на Openshift перейдя по ссылке
2. Установите инструменты командной строки RHC.
3. Запустите командную строку, перейдите в директорию, где будет располагаться проект
4. Выполните команду rhc app create myphpapp php-5.4 
5. Введите пароль, полученный при регистрации
6. Вы получите данные созданного приложения: URL, параметры для ssh доступа и другие данные

Создание проекта

1. Перейдите в директорию с проектом (myphpappОткройте файл index.php и замените данные в файле index.php на:
<?php
$a = 1;
echo 'Hello World';

2. Создайте файл .htaccess следующего содержания:
php_flag xdebug.remote_enable on
php_value xdebug.remote_host '0.0.0.0'
php_value xdebug.remote_log 'xdebug.log'

здесь мы включили удаленную отладку, указали IP адрес локальной машины (замените '0.0.0.0' на ваш IP адрес) и имя файла для вывода лога.

3. Чтобы не сохранять настройки проекта в git репозитории, создайте файл .gitignore следующего содержания
*.sublime-project
*.sublime-workspace

4. Выполните коммит в git, чтобы зафиксировать изменения. Для этого выполните команду git add --all
5. Выполните команду git commit -m "initial commit" (замените "initial commit" на имя коммита)
6. Выполните команду git push чтобы отправить коммит на сервер.
7. Откройте URL (мы получили его при создании PHP приложения OpenShift из командной строки) в браузере, чтобы увидеть текст "Hello World"

Development Mode (Режим разработчика)

Режим разработчика позволяет отлаживать php код и включает расширение XDebug, а также:
- отображает детальные сообщения об ошибках
- отображает ошибки при запуске
- включает apc.stat  (проверка при каждом запросе, что скрипт был изменен)
- игнорирует файл composer.lock

1. Включите режим разработчика, выполнив команду rhc env set APPLICATION_ENV=development

2. Перезапустите приложение, выполнив команду rhc app restart


Настройка проекта в Sublime Text

1. Установите Package Control
2. Перейдите в меню Preferences->Package Control, выберите пункт: Package Control: install Package, в появившейся строке для поиска введите xdebug client. Установите этот пакет.
4. Откройте директорию с проектом myphpapp в Sublime Text (File->Open Folder)
5. Сохраните проект (Project->Save Project as) в директории с  проектом.
6. Отредактируйте настройки проекта, перейдя в меню Project->Edit Project

{
"folders":
[
{
"path": "."
}
],
    "settings": {
        "xdebug": {
        "path_mapping": {
"/var/lib/openshift/uuid/app-root/repo" : "***",
},
            "url": // url приложения, полученный при создании PHP приложения в OpenShift 
            "debug": true
        }
    }

}

В разделе path_mapping нужно указать соответствие директории с проектом на сервере директории с проектом на локальной машине. Значение uuid можно получить выполнив в командной строке команду rhc apps. Также можно зайти на сервер по ssh и узнать пут к директории.

Процесс отладки

Детальное рассмотрение XDebug выходит за рамки этой статьи. Рассмотрим лишь Breakpoints (точки остановки). Они позволяют остановить выполнение кода и посмотреть значения переменных на момент остановки. 

1. Чтобы установить точку остановки кликните на строку echo 'Hello World';  в файле index.php правой кнопкой мыши и выберите Xdebug->add/remove breakpoint. Установите точку остановки на строке 
<?php
$a = 1;
echo 'Hello World';

2, Перейдите в меню Tools->Xdebug->Start Debugging (Launch Browser). В браузере откроется страница http://myphpapp-***.rhcloud.com/?XDEBUG_SESSION_START=sublime.xdebug и
вы увидите значения переменных на момент остановки.

Просмотр значений переменных

3. Перейдите в меню Tools->Xdebug->Stop Debugging (Launch Browser) чтобы завершить отладку. В браузере откроется страница http://myphpapp-***.rhcloud.com/?XDEBUG_SESSION_STOP=sublime.xdebug