20 ноября 2015 г.

Всем нам приходится отлаживать свой код. Кодить код идельно с первого раза очень сложно и только некоторые (и то вряд ли) могут похвастаться этим. Уже есть достаточно статей о том, как использовать xdebug в той или иной IDE, но сегодня я расскажу о том, как организовать совместную работу Xdebug с Sublime Text 2 или 3.

Начнём

Прежде всего нам необходимо иметь установленное расширение для PHP под названием Xdebug. Если его у вас еще нет - есть так же масса статей о его установке и конфигурации. Как бы то ни было - это тема отдельной статьи. Удостоверьтесь, что Xdebug работает в phpinfo(), он должен присутствовать в списке. Ну, и конечно, у нас должен быть сам Sublime Text. Я буду использовать последнюю версию (на текущий момент это 3 версия), но так же этот способ должен работать и с Sublime Text 2.

Настройка Xdebug

Прежде всего нам необходимо настроить Xdebug, добавив в ваш php.ini несколько строчек. Так же есть ещё вариант выделить конфиг в отдельный файл xdebug.ini, он, пожалуй, более предпочтительный. Можете почитать об этом на английском тут.

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_log="/var/log/xdebug/xdebug.log"

127.0.0.1 — это адрес вашего компьютера. Логгирование не обязательно, но иногда, на случай проблем, помогает разобраться с ошибками.

Не забудьте перезапустить web-сервер.

Установка Sublime Text 3

Одна из сильных сторон Sublime Text в том, что вы можете с лёгкостью расширяеть его функциональность с помощью сторонних пакетов. В данном случае мы как раз воспользуемся этой возможностью и установим Xdebug-клиент для отладки. Если вы не устанавливали сторонние пакеты до этого, то для начала установить менеджер пакетов.

Как только менеджер пакетов установлен, вам следует открыть в Sublime Text командное меню (Ctrl+Shift+P) и выбрать пункт "Install Package".

Менеджер обновит репозиторий и теперь можно найти нужный нам пакет. Наберите в строке поиска: "Xdebug client".

Наконец, последня вещь, которую нам нужно сделать — настроить сам проект. Самый простой способ сделать это — открыть корневую директорию вашего проекта, перейти в меню "Project" и выбрать пукнт "Save Project As...". Я рекомендую вам сохранить вам файл проекта в корневой директории, таким образом вы сможете поместить его под контроль версий, чтобы потом с лёгкостью настроить отладку заново на другой машине.

Откройте только что созданный файл проект. Внутри вы увидите json с параметрами. Выглядеть это может по-разному. Например так:

{
    "folders":
    [
        {
           "follow_symlinks": true,
           "path": "."
        }
    ]
}

Нам необходимо добавить немного своего:

{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "."
        }
    ],
    "settings": {
        "xdebug": {
             "url": "http://my.local.website/",
        }
    }
}

Как вы уже заметили, я только добавил URL моего web-приложения. Мы можем добавить и другие настройки Xdebug, но для начала нам хватит и этого минимального набора. URL приложения можно установить и непосредственно в самих настройках пакета, но в таком случае, при работе с несколькими проектами, придётся менять этот URl каждый раз.

Старт Xdebug сессии

Теперь мы можем выполнить старт Xdebug сессии и проверить всё ли верно мы настроили. В меню кликните на "Tools" - "Xdebug" - "Start debugging". Вы заметите, что открылся ваш браузер. А к URL вашего приложения добавилась строка XDEBUG_SESSION_START=sublime.xdebug. Таким образом мы выполнили старт сессии отладки. При этом в Sublime Text появится пара дополнительных панелей с отладочной информацией, когда вы установите точки прерывания.

Точки прерывания (Breakpoints)

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

Мы можем добавить точку с помощью клика правой кнопкой мыши на нужной нам строке в коде, перейти в подменю "Xdebug", и выбрав пункт "Add/Remove Breakpoint". На нужной нам строке появится маркер, который будет указывать на то, что в данном месте установлена точка прерывания.

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

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

В контексте вы увидите все глобальные переменные, а так же переменные, которые вы объявили самостоятельно. Вы можете кликнуть на этих переменные для того, чтобы посмотреть какое значение они содержат. Для примера, на скриншоте я кликнул на переменной<code">$_SERVER.

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

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

  • Run Продолжит выполнение программы до следующей точки или до выхода из приложения
  • Run to line Продолжит выполнение программы до строки, которую вы укажете
  • Step into Зайдёт внутрь текущей функции и остановится внутри неё
  • Step over Перешагнёт через функцию и остановится сразу после её окончания
  • Step out Выйдет их текущей функции и остановится сразу после её окончания
  • Stop Остановит отладку
  • Detach Так же выполняет остановку отладки

Run и Stop вполне понятные пункты. Методы Step могут смущать новичков. Давайт рассмотрим простой пример. 


Class Foo() 
{

    public function bar(Array $arr)
    {
        $arr = self::fooBar($arr); // Breakpoint
        return $arr;
    }

    public function fooBar(Array $arr)
    {
        return array_values($arr);
    }
}

Представьте, что вы добавили точку останова на первой линии внутри метода bar. Там, где указан комментарий  // Breakpoint

Если выбрать Step into, то отладчик зайдет внутрь метода fooBar и остановится на его первой линии. В данном случае отладчик остановится на строке return array_values($arr);

Step over выполнит выхов метода, но не остановится в нём. Он остановится сразу на следующей линии после вызова метода. В данном случае это линия return $arr;

Наконец, Step out пройдёт через весь метод и вернётся в место его вызова. В данном случае мы вернёмся в объект, обратно к вызову $arr = self::fooBar($arr);

Если вы решите выбрать пукнт Run, то отладчик продолжит выполнение программы до тех пор, пока не встретит точку останова или приложение не завершится.

Заключение

В данной статье мы рассмотрели способ интеграции Xdebug с Sublime Text и разобрались в азах отладки. Почти каждая IDE, предназначенная для работы с PHP способна работать с Xdebug. Использовать отладчик намного удобнее, чем var_dump.


Источник

Автор: Артур Минимулин ⚫ 20 ноября 2015 г.Тэги: IDE, Linux, php, Баг, Конфигурация, Совет, Софт