среда, 25 мая 2011 г.

Настрока Xdebug

При возникновении ошибок нужно ответить на четыре вопроса. Xdebug может предоставить всю нужную информацию, причем немедленно. Вот для начала несколько полезных настроек.
Сохраните эти настройки в файле php.ini, а затем перезапустите ваш Web-сервер:

zend_extension = /usr/lib/php/extensions/xdebug.so
xdebug.default_enable = On

; разрешает трассировку исключительных ситуаций, даже
; если вы перехватили исключительную ситуацию:
xdebug.show_exception_trace = On

; выводит все локальные переменные самой внешней области видимости
; каждого вызова функции, включая еще не инициализированные переменные:
xdebug.show_local_vars = 1

;ограничение глубины рекурсии:
xdebug.max_nesting_level = 50

; указывает глубину вывода комплексной переменной:
xdebug.var_display_max_depth = 6

; управляют тем, какие суперглобальные переменные PHP
; включаются во все диагностические результаты
xdebug.dump_once = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT

; для вывода суперглобальных переменных, перечисленных
; в настройках xdebug.dump.SUPERGLOBAL:
xdebug.dump_globals = On

Подробности настройки: http://www.ibm.com/developerworks/ru/library/os-php-xdebug/index.html#configuring

Отладка массивов и классов PHP

Xdebug предоставляет расширенную функцию var_dump(), которая особенно полезна для массивов и классов PHP. Например, в листинге 6 приведен простой (PHP V4) класс и экземпляры.

Трассировка кода

При разрешенной трассировке Xdebug регистрирует каждый вызов функций, включая аргументы функции и возвращаемое значение. Можно отформатировать каждый log-файл для более удобного его восприятия человеком или машиной. Первый вариант вы можете просматривать сами, а для второго можно написать отдельное приложение для анализа.

Настройка трассировки в php.ini

xdebug.trace_format = 0
; автоматически разрешает трассировку до выполнения любого PHP-сценария:
xdebug.auto_trace = On

; управляют тем, где сохраняется информация трассировки:
xdebug.trace_output_dir = /tmp/traces

; каждый файл начинается с trace, за которым следует
; имя PHP-сценария (%s) и идентификатор процесса (%p):
xdebug.trace_output_name = trace.%c.%p

xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
Названия всех файлов трассировки Xdebug заканчиваются суффиксом .xt.
Автотрассировка
Настройка xdebug.auto_trace = 1 автоматически разрешает трассировку до выполнения любого PHP-сценария. В качестве альтернативы можно установить xdebug.auto_trace = 0 и использовать функции xdebug_start_trace() и xdebug_stop_trace() из вашего кода для разрешения и запрета трассировки соответственно. Однако если xdebug.auto_trace установлен в значение 1, можно начать трассировку до включения сконфигурированного auto_prepend_file.
Формат данных трассировки
По умолчанию Xdebug отображает поля времени, использования памяти, имени функции и глубины вызова функции. Если установить xdebug.trace_format в значение 0, информация выводится в виде, удобном для чтения человеком (для машинного формата используется значение 1). Кроме того, можно обнаружить рост или уменьшение использования памяти при указании xdebug.show_mem_delta = 1, а тип и значения входящих параметров можно выводить, указав xdebug.collect_params = 4. Для отслеживания значения, возвращаемого каждой функцией, установите xdebug.collect_return = 1.

Чтение результатов трассировки

Ниже показана трассировка PHP-генератора чисел Фибоначчи, вычисляющего четыре числа Фибоначчи:

TRACE START [2007-06-06 14:17:17]
    0.0004      16432   +16432   -> {main}() /var/www/catalog/t/fibonacci.php:0
    0.0006      16696     +264     -> fib('4') /var/www/catalog/t/fibonacci.php:35
    0.0007      16696       +0       -> fib(3) /var/www/catalog/t/fibonacci.php:7
    0.0007      16736      +40         -> fib(2) /var/www/catalog/t/fibonacci.php:7
    0.0007      16848     +112           -> fib(1) /var/www/catalog/t/fibonacci.php:7
                                         >=> 1
    0.0008      16904      +56           -> fib(0) /var/www/catalog/t/fibonacci.php:7
                                         >=> 0
                                       >=> 1
    0.0009      16904       +0         -> fib(1) /var/www/catalog/t/fibonacci.php:7
                                       >=> 1
                                     >=> 2
    0.0009      16904       +0       -> fib(2) /var/www/catalog/t/fibonacci.php:7
    0.0009      16904       +0         -> fib(1) /var/www/catalog/t/fibonacci.php:7
                                       >=> 1
    0.0010      16904       +0         -> fib(0) /var/www/catalog/t/fibonacci.php:7
                                       >=> 0
                                     >=> 1
                                   >=> 3
                                 >=> 1
    0.0011      12528
TRACE END   [2007-06-06 14:17:17]

Значения колонок:
  1. время,
  2. суммарное использование памяти,
  3. инкрементное использование памяти,
  4. вызовы функций, включая параметры.
Строки, отмеченные символами >=>, показывают возвращаемое значение из каждой функции (для сопоставления вызова функции с возвращаемым ею значением нужно найти -> с соответствующим отступом). Опять же, последнее значение >=> 1 является значением, возвращаемым функцией main().

Комментариев нет:

Отправить комментарий