Статьи

Отладка с помощью Xdebug и Sublime Text 3

Отладка — мы все делаем это много. Писать код идеально с первого раза сложно, и лишь немногие (если таковые имеются) преуспевают в этом. Более года назад Шамер написал в SitePoint статью о том, как можно отлаживать приложение с помощью Xdebug и Netbeans. В этой статье мы рассмотрим, как мы можем отлаживать, используя Xdebug в сочетании с Sublime Text.

Начиная

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

Настройка Xdebug

Нам нужно настроить xdebug, добавив следующее в файл php.ini или, что еще лучше, в файл xdebug.ini как описано здесь в разделе «Практические xdebug.ini по Linux».

 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 в качестве хоста. Однако, если вы используете vagrant, например, вы будете использовать что-то вроде 10.0.2.2, в зависимости от того, где Xdebug может найти вашу систему.

Удаленный журнал не нужен, но в случае проблем это место, где вы можете найти информацию об ошибках, которые произошли.

Не забудьте перезапустить ваш веб-сервер!

Настройка Sublime Text 3

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

После того, как вы установили управление пакетами, вы должны запустить Sublime Text 3. Откройте командную палитру из меню инструментов и найдите «install package».

Теперь вы можете искать любой пакет, который вам нравится. В нашем случае мы будем искать пакет «Клиент Xdebug».

Последнее, что нам нужно сделать, это настроить проект в Sublime. Самый простой способ сделать это — открыть корневой каталог вашего приложения, перейти к проектам и нажать «сохранить проекты как». Я предлагаю вам сохранить файл в корне вашего приложения, чтобы вы могли сохранить его в своей системе контроля версий, если вы используете какой-либо файл, и вы можете легко настроить его в любое время.

Откройте только что созданный файл проекта. Содержание будет выглядеть так:

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

Мы собираемся добавить еще несколько строк:

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

Как вы можете видеть, я только добавил URL к моему настоящему веб-приложению. Я мог бы установить больше настроек для Xdebug, однако этого достаточно для начала. Я мог бы также установить этот URL в настройках самого Xdebug, но в этом случае я не мог работать над несколькими проектами без необходимости каждый раз изменять конфигурацию Xdebug.

Запустите сеанс Xdebug

Теперь мы можем запустить сеанс Xdebug, чтобы увидеть, все ли настроено правильно. В меню выберите «Инструменты -> Xdebug» и нажмите «Начать отладку» (запустить браузер). Вы заметите, что ваш веб-сайт открыт и что ?XDEBUG_SESSION_START=sublime.xdebug добавляется в конец URL-адреса. Это запустит сеанс xdebug. В Sublime появляются некоторые дополнительные панели, на которых будет отображаться отладочная информация, после того, как вы установили одну или несколько точек останова.

Контрольные точки

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

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

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

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

В этом контексте вы увидите все глобальные переменные, а также переменные, которые вы определили сами. Вы можете нажать на эти переменные, чтобы увидеть, что именно эти переменные содержат. Например, на скриншоте ниже я щелкнул по переменной $ _SERVER.

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

Итак, наше приложение остановилось, и теперь мы можем просматривать определенные переменные. Тем не менее, мы сделали, и мы хотим двигаться дальше. Что теперь? Когда вы снова щелкните правой кнопкой мыши и наведите курсор мыши на меню Xdebug, у вас будет несколько вариантов:

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

Бежать и останавливаться довольно легко понять. Методы шага могут быть немного запутанными. Давайте углубимся в это на простом примере.

 Class   Foo ()  
 { 

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

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

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

С шагом в, отладчик перейдет в метод fooBar и остановится на первой строке. Так что в этом случае отладчик остановится на return array_values($arr); линия.

Шаг за шагом вызовет метод, но не остановит. Он остановится на следующей доступной строке после вызова метода. Так что в этом случае он остановится на return $arr;

Наконец, с выходом он будет проходить через весь метод bar и вернется к вызывающей стороне. В этом случае он выйдет из объекта обратно к исходному вызывающему.

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

Вывод

В этой статье мы увидели, как мы можем интегрировать Xdebug с Sublime, и убедились, что понимаем, как отлаживать. Почти каждая IDE, подходящая для PHP, может интегрироваться с Xdebug. Если вы заинтересованы в такой отладке в Netbeans, посмотрите статью, упомянутую во введении. Вы используете точки останова? Или вы используете функции PHP, такие как var_dump, для получения данных отладки? Дайте нам знать в комментариях ниже!