Установка и настройка Xdebug

install-and-configure-xdebug
Есть очень хороший инструмент для отладки php кода — Xdebug. Сегодня я расскажу как его развернуть на своей машине, а также как настроить NetBeans IDE на работу с ним.

Немного о Xdebug

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

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

Установка Xdebug

Уже довольно давно Xdebug, как расширение для php, присутствует в репозиториях. Поэтому его установка очень проста, для этого введите в консоли следующую команду.

aptitude install php5-xdebug
Внимание! Пример приведен для Linux Debian и ему подобных. Команду следует выполнять с правами супер пользователя (su, sudo).

С установкой покончили. Перейдем к настройке.

Настройка Xdebug

Настройка расширения выполняется при помощи редактирования конфигурационных ini файлов. Тут есть два пути:
1. В php.ini создаем секцию [xdebug] и в ней задаем параметры.
2. Все параметры задаем в xdebug.ini, который хранится тут /etc/php5/conf.d/xdebug.ini
Тут решать Вам и только Вам.

Куда писать — определились. Определимся что писать?
Давайте я приведу список настроек, и поясню, что они означают:

[xdebug]
xdebug.default_enable = On; включить xdebug по умолчанию
xdebug.var_display_max_depth = 6; глубина показа дампа массивов и объектов
xdebug.remote_enable = On; включить удаленную отладку
xdebug.remote_host = 127.0.0.1; хост для удаленной отладки
xdebug.remote_port = 9000; порт для удаленной отладки
xdebug.remote_handler = dbgp; протокол для отладки
xdebug.idekey = netbeans-xdebug; идентификатор, который будет отправлять наша IDE
xdebug.remote_autostart = 1; автоматический запуск отладки
xdebug.remote_log=/tmp/xdebug/xdebug.log; лог-файл для удаленной отладки
xdebug.profiler_enable_trigger = 1; запускать профилирование по триггеру
xdebug.profiler_enable = 0; включить профилирование
xdebug.profiler_output_dir = /tmp/xdebug/profiler/; директория для хранения результатов профилирования
xdebug.show_local_vars = 1; отобразить все локальные переменные в случае возникновения ошибки
xdebug.overload_var_dump = 1; включает усовершенcтвованный var_dump

После, необходимо перезагрузить apache:

sudo /etc/init.d/apache2 restart

Чтобы убедиться, что все хорошо, выведите
phpinfo();
Если такой текст имеется — значит все отлично:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

Теперь проверим улучшенный var_dump:

$object = new stdClass();
$array = array(1, 'var_dump test', 4 => $object);
var_dump($array);

Вы должны увидеть красивый стилизированный вывод содержимого массива.
Теперь создадим ошибку (забудем ; в конце строки)

echo 'Xdebug'

Должны увидеть подробное сообщение об ошибке, представляющее собой таблицу. Ели по какой-то причине, это не произошло и Вы видите на экране html теги, вероятно необходимо изменить значение параметра html_errors в php.ini

html_errors = On;

Теперь еще раз перезагрузим apache.
Либо же просто в коде укажите

ini_set('html_errors', 'On');

Настройка NetBeans IDE

Устанавливаем NetBeans, если он еще не установлен. Заходим в Сервис → Параметры. Переходим в меню PHP, далее вкладка «Отладка (Debugging)».
Порт отладчика: 9000
Идентификатор сеанса: netbeans-xdebug
Хочу отметить, что порт сеанса, как и идентификатор сеанса могу быть другими. Например, можно указать идентификатор ide-xdebug, но тогда и в параметрах xdebug придется указать такое же значение.

Остальные параметры настраиваем под себя.

Ну, а о том, как выполнять отладку — в другой раз.

Stas Kuryan

Web developer. Перфекционист в написании кода.

Комментарии (8)

  1. Андрей   •  

    у меня дебаг появился в phpinfo, однако — вывод ошибок стандартный получается, нет оранжевого фона

    • Stafox   •     Автор

      Проверьте конфиг файл php.ini: параметр html_errors должен иметь значение 1

      html_errors = 1;

  2. Pingback:Zend Framework 2: Логирование с ZendLog

  3. Алексей   •  

    Вы, пожалуйста, «учебных примеров» больше не пишите, и не учите никого. Начните-ка с тестирования своего кода:

    sudo aptitude install php5-xdebug

    в консоли ВООБЩЕ НЕ ВОСПРИНИМАЕТСЯ КАК КОМАНДА. На этом польза от вашей «статьи» полностью исчерпана.

    • Stafox   •     Автор

      Уважаемый, Алексей.
      Грамотные люди, обычно, когда делают заявление что что-то не работает указывают окружение, в котором это было выявлено (ос, дистрибутив) и текст ошибки.

      Ubuntu — полет нормальный. Debian — тоже (без sudo естественно и под su).

  4. Diam   •  

    Ещё на заметку, у меня после установки php5-xdebug не прописался автоматом PATH к модулю xdebug.so, поэтому пришлось добавить ещё в xdebug.ini путь до модуля:

    zend_extension=/usr/lib/php5/20100525/xdebug.so

  5. MobiAppSystems   •  

    Можно еще добавить в настройку профайлинга такую строку
    xdebug.profiler_output_name = «cachegrind.out.%H%R»

    чтобы было видно по названию файла с какого запроса происходил вызов

    • Stafox   •     Автор

      Согласен, полезный параметр.
      Подробнее об этом параметре можно прочитать а официальной документации XDebug profiler_output_name

Добавить комментарий для Андрей Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *