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

Первая часть

Официальный сайт по проекту — www.xdebug.org
Параметры настройки, в скобках указана версия (например, Xdebug 2) — www.xdebug.org/docs-settings.php
Документация — www.xdebug.org/docs.php

Установка XDebug2 под Windows

1. Скачиваем расширение под нужную вам версию PHP:
PHP 4.4.1+
PHP 5.1.2+
PHP 5.2.1+

2. Правим php.ini:
; путь к скачанному расширению (указать свой). если не будет работать, заменить zend_extension_ts на extension
zend_extension_ts=«C:\program files\php\extensions\php_xdebug.dll»
; включение/отключение профайлинга (1/0)
xdebug.profiler_enable = 1
; директория для результатов профайлинга (по умолчанию)
xdebug.profiler_output_dir = «c:\program files\php\tmp_xdebug»

Данные по выполнению скрипта пишутся в файл формата cachegrind (текстовый файл). Эти файлы прекрасно читает виндовая утилита WinCacheGrind.

Установка XDebug2 под Linux

1. Скачиваем исходный код
2. Правим php.ini:
; включение/отключение профайлинга (1/0)
xdebug.profiler_enable = 1
; директория для результатов профайлинга (по умолчанию)
xdebug.profiler_output_dir = "/data/home/user/projects/tmp_xdebug"
3. Дальше курим мануал :)

Настройка XDebug

Если у вас один проект, над которым вы работаете, то директивы XDebug можно прописать в файле php.ini. Они будут действовать на все проекты на вашем веб-сервере.

Если же вам нужно настроить XDebug индивидуально под каждый проект, то используйте php_value в файле .htaccess (Apache)

Пример настройки:
#Изменить пути к логу на свои (+создать директорию для лога)
<IfModule mod_php4.c>
#путь к логу XDebug
php_value xdebug.profiler_output_dir /data/home/user/your_project/tmp_xdebug

#php_value xdebug.trace_output_dir /data/home/user/your_project/tmp_xdebug

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

#автотрасировка выключена
php_flag xdebug.auto_trace 0

#важная опция. При 1 — лог сохранятся, при 0 — выдается при GET-параметре XDEBUG_PROFILE (http://yourhost/?XDEBUG_PROFILE)
php_flag xdebug.profiler_enable 0

php_flag xdebug.profiler_enable_trigger 1

#собирать параметры, возвращаемые значения, переменные (0 — выключено, 1 — вкл)
#php_flag xdebug.collect_params 0
#php_flag xdebug.collect_return 0
#php_flag xdebug.collect_vars 0

#отключает обработку ошибок профайлером, 1 — включает
#php_flag xdebug.default_enable 1
#показывать в логе использование памяти между вызовами функций
php_flag xdebug.show_mem_delta 1

#1 — человекопонятный вывод лога
php_flag xdebug.trace_format 0

#timestamp — второй формат названия выходного файла
#php_value xdebug.trace_output_name crc32

php_value xdebug.profiler_output_name pid
</IfModule>


Полный список настроек.



Вспомогательный файл для получения профайл-лога через GET-параметр и просмотра WinCacheGrind (скачать), оригинал кода был взят год назад с форума dklab

+4
24 апреля 2007, 08:05
35
Butylski –11,5

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

0
krollik #
Эх, что-нить такое же, только чтобы можно было поставить на старонний хост, т.е. без копания в php.ini, есть?
+1
delightmanua #
сейчас очень много хостеров вместо услуги "Hosting" предлагают "Виртуальный colocation", где есть возможно ковырять всё, что угодно.

А без интеграции с бинарниками php невозможно получить такую подробную статистику и отладочную информацию.
0
noway #
Очень интересная вещь. Только пока не понятно, как понимать логи, которые попадают в WinCacheGrint
0
Butylski #
а их понимать не надо. там указано время выполнения каждой строки/время выполнения функции/кол-во вызовов и т.д.

все ясно вроде.
0
vrazbros #
Вещь не только интересная, но и полезная сохраннил для потомков на http://www.xdebug.ru
+1
silverwind #
Спасибо!
+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
pioneer #
Товарищи, у кого-нибудь получалось настроить многопользовательскую отладку на удаленном сервере с помощью xdebug?
Имеется в наличии:
1. Сервер для разработки PHP-проектов, с установленной последней версией xdebug
2. Несколько девелоперов, работающих над проектами, которые лежат на этом сервере.
Хочется:
- иметь возможность использовать пошаговую отладку в проектах на этом сервере
Пока что удалось:
- настроить пошаговую отладку на локальной машине девелопера с помощью Eclipse + PDT + PDT XDebug Extension

У xdebug есть директива xdebug.remote_host, в которой нужно указывать хост рабочей машины девелопера (на которой стоит Eclipse и прочие средства). Собственно, машин таких несколько, и не хотелось бы "отлаживать по очереди".

Может, кто имеет опыт подобной настройки?
0
Butylski #
а можно подробнее про PDT XDebug Extension? где его взять, как подключить к Eclipse?
0
pioneer #
Вот это - главный линк к оному расширению для Eclipse.

Вкратце:
1. Установить Eclipse.
2. Установить PDT для него.
3. Скачать последний PDT XDebug Extension. На странице, ссылка на которую приведена выше, есть линк на страницу загрузки, но я его также приведу здесь. Это линк на багзиллу Eclipse, и PDT XDebug Extension прикреплен там в виде аттача к багу. Пока, к сожалению, он распространяется только в таком виде. Скачивать нужно самый свежий файл, озаглавленный как "Prebuilt Binary of XDebug ...".
4. В полученном архиве находится 2 jar-файла, являющиеся расширениями к Eclipse, и очень толковая инструкция к использованию XDebug в формате PDF. К сожалению, в этой инструкции ничего не сказано по поводу того, что делать с указанными jar-файлами для того, чтобы подключить их к Eclipse и научить его общаться с XDebug, но на самом деле всё очень просто - их нужно переписать в папочку eclipse/plugins и перезапустить Eclipse, а дальше читать инструкцию, которая, я повторяю, очень толковая. Мне удалось настроить пошаговую отладку php-проектов, запущенных на локальном Denwer'е.
–1
Butylski #
thanx! :) Eclipse PDT ковыряю с утра. ZDE - блокнот по сравнению с возможностями Eclipse ;)
0
shadeR #
Есть еще альтернатива PDT - PHPEclipse. Рекомендую установить и посмотреть.
0
R_tem #
В эклипсе вроде нет поддержки xdebug. Только в ночных версиях.
0
Prophet #
Начиная с 2.0.0RC4, Xdebug сохраняет время выполнения в микросекундах (10-6c), а до этого сохранял в десятках миллисекунд (10-5c).
В связи с этим при просмотре результатов профайлинга в WinCacheGrind все числа в 10 раз меньше настоящих (например, 40мс вместо 400мс).

Так как WinCacheGrind уже давно не обновлялась, пытался найти более старые версии xdebug под win, но так ничего и не нашёл.
0
Butylski #
не надо искать более старые версии. XDebug1 сохраняет данные в формате, который WinCacheGrind не понимает (обычный txt). кстати, а где вы нашли информацию про время выполнения?

PS: сайт проекта обновился немного. кто-то спрашивал про remote debbugin' http://www.xdebug.org/docs/remote
0
Butylski #
версия 2.0 под Win, для PHP разных версий: http://pecl4win.php.net/ext.php/php_xdeb…
0
Prophet #
Для 2.0 тоже в WinCacheGrind время выводится неправильно, из-за смены единиц измерения. Об этом написано в changelog'е версии 2.0RC4 от [17-05-2007].
Use µ seconds instead of a tenths of µ seconds to avoid confusion in profile information.

Поэтому решил пользовать версию 2.0RC3, с которой WinCacheGrind правильно отображает время выполнения.
0
Develar #
Под windows и mac с июня 2007 есть CachegrindVisualizer - http://code.google.com/p/cachegrindvisualizer/
0
Butylski #
появился Xdebug под PHP 5.3.0 - http://xdebug.org/link.php?url=xdebug202…
0
Butylski #
текущая версия - xdebug 2.0.2

Fixed bug #325: DBGP: "detach" stops further sessions being established from Apache.
Fixed bug #321: Code coverage crashes on empty PHP files.
Fixed bug #318: Segmentation Fault in code coverage analysis.
Fixed bug #315: Xdebug crashes when including a file that doesn't exist.
Fixed bug #314: PHP CLI Error Logging thwarted when XDebug Loaded.
Fixed bug #300: Direction of var_dump().
Always set the transaction_id and command. (Related to bug #313).

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