10.07 2010

Если вы программируете не первый день, то наверняка слышали про xdebug, средство отладки для PHP. Его использование изрядно упрощает жизнь, помогает быстрее отыскивать баги и соответственно их устранять. Помимо отладки, это расширение позволяет производить профилирование, трассировку, подсчет покрытия кода, а также делать красивый форматированный вывод исключений и [vardump](http://php.net/vardump) =)

Шаг 1. Установка

Если вы пользователь Ubuntu, то можете установить расширение простой командой:

sudo apt-get install php5-xdebug

на данный момент в репозитории находится предпоследняя стабильная версия (2.0.5), но она по ряду причин меня не устраивала. Если вы хотите получить последнюю версию - прошу к следующему шагу, если нет - пропустите его.

Шаг 2. Компиляция

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

cd ~
mkdir xdebug
cd xdebug

# Вариант 1. Качаем стабильный архив
wget http://www.xdebug.org/files/xdebug-2.1.0.tgz
tar -xf xdebug-2.1.0.tgz
cd xdebug-2.1.0

# Вариант 2. Или берем из svn репозитория последнюю версию
svn co svn://svn.xdebug.org/svn/xdebug/xdebug/trunk xdebug
cd xdebug

# Для компиляции нам понадобится php5-dev и стандартный набор build-essential
sudo apt-get install build-essential php5-dev

# подготовка
phpize
# должен вывести что-то такое
# Configuring for:
# PHP Api Version:         20090626
# Zend Module Api No:      20090626
# Zend Extension Api No:   220090626
./configure --enable-xdebug
# Если появилась ошибка, читаем внимательно и удовлетворяем зависимости
make -j4 # -j2 для двух-ядерных систем

скомпилированная библиотека xdebug.so появится в папке modules

Шаг 3. Настройка XDebug

Открываем любимым редактором файл (с правами root):

/etc/php5/apache2/conf.d/xdebug.ini

zend_extension=/home/%USERNAME%/xdebug/xdebug/modules/xdebug.so
xdebug.default_enable = On
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
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir=/tmp/profiler
xdebug.show_local_vars=1
xdebug.overload_var_dump=1

zend_extension - путь к модулю, если вы не компилировали xdebug, то не меняем

xdebug.default_enable - по умолчанию включен

xdebug.vardisplaymax_depth - глубина дампа массивов и объетов

xdebug.remote_enable - отладка по умолчанию включена

xdebug.remote_host - хост, на который будут идти отладочные данные

xdebug.remote_port - порт

xdebug.remote_handler - может быть dbgp или php3. Это протокол передачи данных отладки. dbgp - более современный

xdebug.idekey - идентификационный ключ, который будет посылать ваша IDE, для присоединения к отладочной сессии

xdebug.remote_autostart - автоматический запуск отладки, без параметра запуска (подробнее в документации)

xdebug.remote_log - лог отладки

xdebug.profilerenabletrigger - запуск профилирования по триггеру

xdebug.profiler_enable - по умолчанию выключен

xdebug.profileroutputdir - папка, в которую будет сохраняться информация по профилированию (папка должна существовать, и должны быть установлены права доступа rw-)

xdebug.showlocalvars - в случае возникновения не обрабатываемого исключения вместе с ошибкой будут выведены все локальные переменные

xdebug.overloadvardump - делает форматированный разноцветный vardump. Для того чтобы это работало, нужно установить в php.ini параметр **htmlerrors = On**

Более подробно о этих и других параметрах читайте в официальной документации

Шаг 4. Перезапуск Apache

sudo service apache2 restart

Шаг 5. Проверка работоспособности

-i | grep xdebug

Шаг 6. Настройка NetBeans для отладки через XDebug

![](/files/netbeans_options.png)

Заключение

Желаю всем приятной отладки и поменьше не очевидных багов =)

comments powered by Disqus