При возникновении ошибок нужно ответить на четыре вопроса. Xdebug может предоставить всю нужную информацию, причем немедленно. Вот для начала несколько полезных настроек.
Сохраните эти настройки в файле php.ini, а затем перезапустите ваш Web-сервер:
Подробности настройки: http://www.ibm.com/developerworks/ru/library/os-php-xdebug/index.html#configuring
Автотрассировка
Настройка 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.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
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.; автоматически разрешает трассировку до выполнения любого 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.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]
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]
Значения колонок:
- время,
- суммарное использование памяти,
- инкрементное использование памяти,
- вызовы функций, включая параметры.
Комментариев нет:
Отправить комментарий