Xdebug — для тех, кому не хватает vardump-а.
January 23, 2008 by Scratch
var_dump() — эта функция знакома большинству программистов, пишущих на php, которые переросли стадию HelloWorld. Любой более-менее сложный проект требует отладки и проверки работы — для чего используются функции наподобие var_dump, print_r, var_export… Некоторые программисты даже наловчились использовать echo, хотя на это бывает страшно смотреть.
Но, как обычно бывает, встроенных средств отладки (а также самописных библиотек) начинает не хватать. Те разработчики, которые перешли на PHP с языков вроде C, страдают от нехватки удобных и мощных средств отладки. Я, например, долго писал на BorlandC++, и отсутствие профайлера и дебаггера в PHP меня дико расстраивало.
Для того, чтобы восполнить этот пробел, придумали программу (а точнее, подключаемое дополнение) XDebug.
Этот модуль очень прост в установке — для того, чтобы воспользоваться им, нужно выполнить следующие шаги:
- Зайти на официальный сайт Xdebug, и скачать сборку модуля для своей версии PHP (счастливые обладатели linux-систем могут скачать исходник и скомпилировать его).
- Скопировать модуль куда-нибудь в недра PHP директории, и вставить в конфиг для PHP следующие строчки :
; Дайте модулю короткое имя -- для удобства. zend_extension_ts = c:\php5\ext\php_xdebug.dll xdebug.remote_enable = 1 xdebug.remote_autostart = 1 xdebug.profiler_enable = 1 ; Назначение этой строки я поясню ниже xdebug.profiler_output_dir = c:/tmp/xdebug_prof/
- Если у вас PHP стоит как модуль Апача — перезапустите сервер.
Вот, теперь вы счасливый обладатель XDebug. Можно начинать пользоваться.
Если вы спросите, почему вы не видите никаких изменений — попоробуйте вызвать ваш любимый var_dump(). И вы сразу поймете, что PHP немножко изменился…
Для того, чтобы действительно получить выгоды из установленного XDebug, рекомендуется, во-первых, скачать оболочку для отладки, а во-вторых — скачать оболочку для профилирования.
Оболочка – это не отдельная программа, а целый класс программ. XDebug предоставляет интерфейс для подключения отладчика, причем действует это через IP-протокол (то есть, вы можете отлаживать код с удаленных компьютеров). Так, XDebug может быть использован в среде Eclipse, в других IDE и даже, например, в текстовом редакторе NotePad++. Именно этот способ я и опишу (остальные не сильно отличаются).
Для начала, нам нужен модуль для отладчика. На странице xdebug, в разделе документации (пункт об удаленной отладке) приведена масса ссылок на различные клиенты-отладчики. Я скачал себе модуль для Notepad++ (кстати, рекомендую — очень удобный текстовый редактор, качать здесь — http://notepad-plus.sourceforge.net/ru/site.htm), установил его и провел тестовый запуск.
Вот так вот выглядит окошко Notepad++ при отладке:
Как и принято у всех нормальных отладчиков, можно ставить точки останова, причем даже условные (увы, у меня не получилось нормально настроить эту функциональность), выполнять пошаговую трассировку, и так далее.
Вторая очень полезная возможность — это профилирование. Опять-таки, без сторонних программ нам не обойтись — на этот раз, мы будем качать WinCacheGrind — собствено, утилита для просмотра репортов от XDebug, и не только от них. Само собой, ссылка на эту утилиту есть в документации XDebug, и ведет она на страницу sourceforge для скачивания инсталлятора. Для нетерпеливых — вот вам ссылочка, качайте, устанавливайте.
Теперь пришло время вспомнить о строчке xdebug.profiler_output_dir в конфигурации — именно сюда XDebug будет складывать результаты профилирования скрипта. WCG должна быть настроена на этот же путь.
После каждого запуска каждого скрипта Xdebug создает специальный файл — обычно с именем cachegrind.out.NNNN (то есть несколько цифр в расширении). Открыв этот файл при помощи WinCacheGrind, мы увидим что-то вот такое:
Само собой, вы должны предварительно настроить утилиту, чтобы она видела рабочую директорию.
На этом я закончу рассказ о замечательном модуле XDebug. Все желающие могут прочесть гораздо больше в оригинальной документации, а о описание Notepad++ и WinCacheGring не входит в цели этой заметки.
Filed under: Tips and tricks |
Интересная статья. Я XDebug использую уже больше года, но о том, что его можно подключить к Notepad++ не знал.
Можно. Там есть даже какой-то stand-alone модуль, я его некоторое время пользовал.
А вот к Эклипсу у меня, увы, подключить пока что не получилось — хотя, мне хватило работы с DBG от NuMega — та еще штука (да, при этом XDebug поддерживает и dbg интерфейс для старых отладчиков).
Спасибо за полезную информацию.