XDebug — если при отладке вам надоели echo(), var_dump() и print_r(). Часть 1.

XDebug — мощное расширение для отладки php-скриптов, которое написал норвежец Дерик Ретанс (Derick Rethans, www.derickrethans.nl, project leader for the eZ components). Работает как под Windows, так и под Linux, поддерживает версии PHP 4.4.1+, PHP 5.1.2+, PHP 5.2.1+.

Данное расширение предоставляет следующую информацию:
— стэк вызовов функций
— распределение памяти (memory allocation)
— профайлинг
— и т.п.
XDebug, в первую очередь, — хороший и легкий в установке профайлер, помогающий разработчику найти «узкие места» в коде, определить какие части вашего кода работают медленно: запросы к БД, подключение файлов, парсинг чего-либо и т.д.

Профайлинг (от англ. profiling) — оценка времени выполнения кода.

На текущий момент существует две версии профайлера: XDebug и XDebug2. Отличаются они форматом профайл-лога и богатством настроек. Первая версия попроще, настроек мало, формат лога читабельный.

Пример профайл-лога для XDebug (версия 1):

Пример профайл-лога для XDebug (версия 1)

Формат лога:
— Time Taken (время выполнения)
— Number of Calls (кол-во вызовов функции)
— Function Name (имя функции)
— Location (месторасположение с номером строки)
— Total Time (общее время выполнения)
Также существует 8 режимов профайлинга. Описывать не буду, можно посмотреть здесь.

XDebug2 на мой взгляд более интересен, так как позволяет просматривать профайл-лог через специальные утилиты: WinCacheGrind (для Windows) и KCacheGrind (для Linux).

WinCacheGrind, просмотр результатов профайлинга

KCacheGrind — более мощная утилита, позволяет визуализировать результаты.

KCacheGrind - более мощная утилита, позволяет визуализировать результаты (Linux)

Все настройки профайлера можно разделить на несколько секций:
— основные настройки (GENERAL SETTINGS)
— настройки вывода (DISPLAY SETTINGS)
— настройки трэйсинга (TRACING SETTINGS)
— настройки удаленной отладки (REMOTE DEBUGGER SETTINGS)
— настройки профайлинга (PROFILER SETTINGS)
— настройки дампинга глобальных переменных (SUPERGLOBAL DUMPING SETTINGS)
PS: настоятельно советую всем прочитать интервью с Дериком Ретансом в журнале PHPArchitect (сентябрь, 2004) [pdf, 910Kb]
+32
23 апреля 2007, 10:01
55
Butylski –11,5

комментарии (30)

+2
hungry #
По какой-то причине не могу поставить плюс топику, поэтому отмечусь здесь. Спасибо.
0
butuzov #
плюнул позитивной кармы
0
Archy #
Интересная заметка, спасибо, но надо её сократить, убрать всё что можно (скриншоты к примеру) под кат.
0
Rommidze #
KCachegrind очень удобен. Пользуюсь им для C++. Настоятельно рекомендую тем, кто на php пишет offline скрипты для какой-нибудь обработки, ибо они как привило связаны с множеством вычислений.
0
Patrick #
Немойму только чем он лучше других?
0
Butylski #
1. простотой установки.
2. выводом результатов.
3. гибкостью настройки.
0
Butylski #
можете сравнить хотя бы с APD
0
Yaro #
Кстати, в последний релиз Waterproof PhpEdit XDebug интегрирован.
0
Patrick #
Всё бы ничего вот только постоянно вылезает
Fatal error: Call to undefined function xdebug_memory_usage() in s:\home\test1.ru\www\index.php on line 5...
0
vrazbros #
кстати если возникли проблемы с xdebug можно зайти на форум на сайте www.xdebug.ru и там спросить)
0
den_rad #
Недавно начал пользоваться, очень удобно, кстати он и var_dump() делает более читабельным :)
Можно его заставить писать логи, например, когда есть определенный cookie, чтобы можно было смотреть узкие места на веб сервере, сильно его не нагружая?
0
peanut #
Спасибо. Интересная статья. Обязательно буду использовать в своих следующих проектах XDebug!
0
diamant #
подписывать главную ссылку "т.п." - это да, это пять :)
0
phpclub #
Дерик Ретанс - через месяц уже будет в Москве на PHPConf 2007
с другим докладом, то тоже супер интересным.
http://www.phpconf.ru/programm.html
0
Patrick #
Доклад на английском будет?
0
phpclub #
Ну не думаю что Дерик сможет изучить быстро русский :-)
В том году кода выступал Расмус (автор PHP)
языкового барьера практически не было.

P.S. Дерик - хороший докладчик
0
tot_ra #
function pre($mixData){
echo '
';
print_r($mixData);
echo '
';
//debug_backtrace();
}
0
vasyathriller #
тег <pre> ты не потерял случаем? :)
0
tot_ra #
ага, можно и <code> туда поставить для логичности
0
BM_Black #
Давно пишу на php и никогда не пользовался дебаггерами :-) Вот пришел повод попробовать. Спасибо за информацию.
0
Butylski #
в второй части я напишу, как его устанавливать и настраивать под несколько проектов
0
hexes #
С нетерпением ждем-с!!!
0
Cionict #
И как, кто поюзал этот дебаггер? Как он по сравнению с Zend Studio?
+1
silverwind #
Да, может кому пригодится простенькое решение:

Задача: просто у удобно использовать такой функционал (согласно конфигу)
# подключаемый вспомогательный файл
# для виндовой утилиты WinCacheGrind (выдает профайл-лог)
# При отладке в адресной строке браузера вводить
# GET-параметр ?XDEBUG_PROFILE (http://yourhost/?XDEBUG_PROFILE).
# Открыть результат WinCacheGrind’ом
# php_value auto_prepend_file \home\debug.class.php

Путь: метод набирания вручную "http://yourhost/?XDEBUG_PROFILE" не удобен.

Решение: на панели закладок ФФ создаем новую закладку (клик правой кнопкой мыши)
и в поле "адрес" вводим (без кавычек, конечно же)
"javascript:document.location = document.location + '?XDEBUG_PROFILE';"

Результат: любая открытая вкладка (с нужным рабочим сайтом) будет перезагружена с добавлением "?XDEBUG_PROFILE".
0
Butylski #
отличное решение :) не подумал даже. спасибо
0
Rhaps107 #
Вообще по-моему те,кто пишут php-проекты сидят не в блокноте, а в pdt или Zend Studio.
В этих средах разработки, а так же, возможно, в других есть средства для дебажинга и профайлинга, предоставляющие те же возможности и намного быстрее, чем запускать скрипт и открывать полученный лог xdebug'a cachegrind'ом каждый раз
0
Butylski #
никто и не говорит, что программисты пишут в блокноте.
встроенные дебаггеры не очень удобные. от версии к версии почти не развиваются, а XDebug - живой проект.
0
Rhaps107 #
Илья, если говорить менее абстрактно, то по факту Xdebug мало чем отличается от, к примеру, стандартного Zend Debugger, единственно тем, что отлаживает скрипты на локальном компьюетере программиста. При установке Zend Platform это ограничение убирается. Возни с Xdebug очень много и цикл работы "запустил - запрофилировал результат - посмотрел - исправил" с ним значительно дольше чем со встроенными дебаггерами, т.к. приходится открывать дополнительные окна, обновлять их и тп, когда при работе с Zend Debugger можно все это сделать двумя кликами и хот-кеями.
Да, конечно, диаграммы, получаемые с пом. cachegrind очень наглядные и красивые, но это вообщем-то приятное излишество в отладке.
В чем поддержу использование xdebug - в том, что полезен вывод backtrace и для любителей - отслеживание вызовов функций (это действительно возможности, которые в стандартных дебаггерах отсутствуют), в остальном возня с ним едва окупает его возможности. По сравнению с готовыми IDE и встроенными debugger'ами.
0
Butylski #
на вкус и цвет..
альтернативные инструменты никогда не были лишними

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