Использование
класса расширенной отладки для InstantCMS 2.0
Всё управление отладкой
вынесено в админку. «Настройки – Отладка»
Включить режим отладки
Разрешает/запрещает отладку на сайте. При выключенном флажке
класс отладки в память не загружается. Выполняется лишь загрузка одного
маленького конфига из файла и проверка одной глобальной константы во всех
местах вызова отладки. Никакие функции отладки при этом не доступны.
Минимальная выводимая
информация при включённой отладке – суммарная таблица со значениями времени
выполнения скрипта и другими параметрами (смотри ниже в этом документе).
При включении режима
отладки выводится постоянное предупреждение об этом в «Панели управления» на каждой странице.
Показывать отладочную информацию только администраторам
При выключенном флажке
отладочная информация показывается только администраторам сайта (не путайте с
группой Администраторы), другим посетителям страницы выдаются как обычно. Это позволяет исследовать работу сайта не прекращая к нему
доступ пользователей.
Обратите внимание, что при этом класс отладки загружается при каждом
создании страницы, и для обычных пользователей тоже. А это притормаживает
работу всего сайта. Пусть увеличение времени составляет всего 1-5 процентов в
зависимости от выбранных режимов отладки, но всё равно, если отладка не нужна,
её лучше выключать совсем.
Показывать контрольные точки
Разрешает вывод всех
контрольных точек в лог внизу страницы под суммарной таблицей. С помощью КТ
можно также включать временный вывод запросов к БД и/или инклудов на отдельных
участках кода. Описание и примеры вызовов КТ даны внизу этого документа.
Для каждой КТ показывается
время выполнения с начала скрипта или с момента предыдущей КТ, если такая уже
была.
Глубина трассировки для контрольных точек
Выпадающий список. Задаёт
общую для всех КТ глубину трассировки вызовов (то есть, показывает
последовательность вызовов по функциям, классам и файлам скриптов до КТ). При
необходимости, глубину трассировки можно задавать для каждой отдельной КТ при
её вызове в коде.
Показывать коннекты и запросы к БД
Разрешает вывод в лог попыток
подключений и запросов к базам данных с подробной информацией о них.
Для запросов на изменение
показывается результат – количество обработанных строк, для запросов на выборку
– количество возвращённых строк. Запросы с ошибками и предупреждениями
подсвечиваются цветом.
Для каждого коннекта или
запроса показывается время его выполнения.
Строка для фильтра SQL-запросов по части строки запроса
Включает показ только тех
запросов, в тексте которых присутствует указанная строка. Строка для сравнения
используется целиком, ищется по всему тексту запроса, знаки подстановки (типа ? и *) не нужны. Фильтр позволяет, например, отобрать
запросы только к указанной таблице или содержащие только обращение к указанному
полю.
Строка для фильтра SQL-запросов по пути/имени вызывающего файла
или класса/функции
Включает показ только
запросов, сделанных из функций/классов, в пути или имени файлов которых, или в
самом имени этих функций/классов присутствует указанная строка. Например, можно
отследить только запросы из одного компонента или из определённой функции.
Внимание! Будьте аккуратны со строками для фильтра. Не стоит
прописывать туда одинарные и двойные кавычки, а также html-теги. Это может
привести к нарушениям в работе сайта, вплоть до полной остановки по критической
ошибке.
Показывать автозагрузки
Разрешает вывод в лог
информации об автозагрузках классов. Доступен выпадающий список глубины
трассировки.
Для каждой автозагрузки
показывается время её выполнения и результат (ОК или ошибка).
Показывать инклуды
Разрешает вывод в лог
информации об инклудах файлов.
Для каждого инклуда показывается время его выполнения и результат (ОК
или ошибка).
Также доступен выпадающий
список глубины трассировки.
В таблице количеств инклудов показывать только 2 и более вызовов
или ошибки
При разрешении показывать инклуды, под общей суммарной таблицей показывается ещё одна
таблица - список всех подключаемых файлов с указанием сколько раз была попытка
их подключения и с количеством ошибок при этом.
Данный флажок позволяет
оставить в таблице лишь те файлы, где были ошибки подключения или которые
подключались два и более раза. Это удобно для выявления неоптимальной работы с
подключаемыми файлами.
Строка для фильтра инклудов по пути/имени подключаемого файла
Включает показ только тех
инклудов, в пути или имени файла которых присутствует указанная строка.
Например, можно увидеть когда и где производится
подключение нужного файла.
Строка для фильтра инклудов по пути/имени подключающего файла
или класса/функции
Включает показ только
инклудов, сделанных из функций/классов, в пути или имени файлов которых, или в
самом имени этих функций/классов присутствует указанная строка. Например, можно
отследить только инклуды из определённого компонента или
из определённой функции.
Показывать хуки
Разрешает вывод в лог
информации о событиях и хуках.
Для каждого события и хука
показывается место вызова и трассировка. Для хуков дополнительно подсчитывается
время их выполнения и опционально выводятся входные
данные и возвращаемые результаты.
Также возможно задание
глубины трассировки.
Выводить в лог данные и результаты хуков
Разрешает выводить в лог
входные данные и возвращаемые результаты хуков.
Таблица хуков
Показывать дополнительную
таблицу. Есть несколько вариантов таблицы:
'Только активные хуки - по хукам –
показывать только сработавшие хуки и обрабатывающие их контроллеры, группируя
их по хукам;
'Только активные хуки - по контроллерам'
– показывать только сработавшие хуки и обрабатывающие их контроллеры, группируя
их по контроллерам;
'Все зарегистрированные хуки - по хукам –
показывать все зарегистрированные хуки и для каждого хука список обрабатывающих
контроллеров;
'Все зарегистрированные хуки - по
контроллерам' – показывать все контроллеры системы со списком хуков,
обрабатываемых каждым контроллером;
'Список произошедших событий' – список событий,
произошедших на странице, и сколько раз они случились;
'Список зарегистрированных хуков' – простой
список хуков, зарегистрированных во всех контроллерах;
'Список контроллеров' – простой список
контроллеров из папки \system\controllers.
Обратите внимание: фильтры
по событию и контроллеру применяются к первым четырём таблицам. При задании
фильтров эти таблицы могут выводиться сокращённо.
Фильтровать события/хуки по событию
Выпадающий список событий.
При выборе любого события в лог будут выводиться информация только о хуках
этого события.
Фильтровать хуки по контроллеру
Выпадающий список
контроллеров. При выборе любого контроллера в лог будут выводиться информация
только о хуках, обрабатываемых в этом контроллере.
Показывать обращения к кэшу
Разрешает вывод в лог
информации об обращениях к кэшу.
Для каждого обращения к
кэшу показывается его тип (SET/GET), ключ, время выполнения этого обращения и
результат (сколько записано байт или получено значений).
Также доступен выпадающий
список глубины трассировки.
Показывать полное (блочное) выделение памяти скрипту
При выключенном флажке
показывается точное использование памяти скриптом в мегабайтах. Этот режим
может быть полезен при отладке кода.
При включенном флажке
показывается реальное выделение памяти, так как PHP выделяет память для
скриптов блоками (их размер задаётся в настройках PHP). Такой режим удобнее для
администраторов серверов.
Имитировать сетевые задержки (в миллисекундах)
Делает паузу перед отдачей
готовой страницы с сервера. В отличие от стандартного
встроенной функции позволяет задать длительность этой паузы в миллисекундах.
Для отключения поставьте 0.
Стандартная встроенная в Инстант функция задержки в этой версии отладки отключена за
ненадобностью.
Вывод в лог контрольных точек,
запросов к БД, инклудов и обращений к кэшу осуществляется последовательно, в
порядке их отработки в коде. Таким образом, можно наглядно видеть что за чем
происходит и как меняется.
Для всех КТ, запросов, инклудов
и обращений к кэшу показывается место вызова (файл, класс, функция, строка), а
также делается трассировка вызова на заданную глубину.
Суммарная
таблица
Для удобства и наглядности вся информация разбита по
столбцам:
Script
script time – время работы скрипта без учёта
отладки, но с учётом заданной сетевой задержки
debug time – время
на работу класса отладки и % от полного времени работы скрипта
full time –
полное время работы скрипта, включая отладку и эмуляцию сетевой задержки
emulate lag – время эмуляции
сетевой задержки (выводится только при её включении)
check points – количество
сработавших точек отладки в коде
PHP
php time – время
работы php и процент времени от времени скрипта
autoloads – количество
автозагрузок классов, время и % от времени php
includes – количество подключений файлов, время и % от
времени php
events/hooks – количество
событий и хуков, время хуков и % от времени php
widgets – количество вызовов виджетов, их время и % от
времени php
controller – время работы контроллера и % от времени php
rendering – время сборки html-кода страницы и % от времени php
SQL
sql time – работы sql и процент времени от времени скрипта
connects – количество подключений к БД, время и % от времени sql
queries – количество запросов к БД, время и % от времени sql
Cache (тип кэша files/memory/off
– файловый/память/выключен)
cache time – время
работы кэша и процент времени от времени скрипта
set – количество установок кэша,
время и % от времени работы кэша
get – количество считываний кэша,
время и % от времени работы кэша
Memory (режим учёта памяти (exact/block – точный/блочный)
peak – максимум
start – в начале работы
end – в конце работы
used – использовано (end-start)
Текущие
параметры отладки
Для наглядности и удобства на вкладке «Отладка» перед
настройками показываются текущие сохранённые параметры отладки. Все параметры
имеют то же самое цветовое оформление по типам обрабатываемых операций, которое
используется в логах (из того же css-файла). При отключении отладки информация
о параметрах не выводится.
Справа от названия обрабатываемых
операций в скобках приведены дополнительные параметры для этих операций). Некоторые из них обозначаются кратко по-английски.
Например:
table – режим таблицы операций перед логами, если таковая
выводится (‘all’ – выводятся все строки таблицы, 'errors_only' – только строки с ошибками, 'active_only' – только активные хуки/вииджеты)
log_hook_data - выводить в лог данные и результаты хуков
log_widget_data - выводить в лог данные виджетов
filter – значение фильтра ('_from'
– часть имени/пути вызывающего php-файла/класса/функции, ‘_file’ – часть имени/пути подключаемого файла, ‘_sql’ – часть SQL-запроса и т.д.)
trace – глубина трассировки
Использования
точек отладки (контрольных точек)
Для вставки КТ достаточно в нужном месте кода
вставить вызов функции обработки КТ. Есть два варианта.
Простой работает при наличии в index.php функции DebugCheckPoint(). В архиве на сайте она уже есть, так
что это рекомендуемый вариант:
DebugCheckPoint($name, $params, $trace_level,
$sql_debug, $include_debug);
Полный вариант:
if (DEBUG_ON) cmsDebug::getInstance()->checkPoint($name, $params, $trace_level, $sql_debug, $include_debug);
При таком варианте проверка константы DEBUG_ON перед любым
обращением к классу отладки обязательна!
Все параметры необязательные:
string $name Название точки, выводится в лог в
кавычках после "CheckPoint"
string $params Строка параметров для лога,
выводится без изменений в отдельном блоке. Если сюда передать только одну
переменную-массив, то содержимое массива будет выведено в удобочитаемой форме,
как при выводе через print_r.
int $trace_level Глубина трассировки вызовов: 0 -
выключить, -1 - по умолчанию из конфига, цифра больше 0 – глубина трассировки
bool $sql_debug Временно включить показ SQL с этой
контрольной точки до следующей КТ
bool $include_debug Временно
включить показ инклудов с этой контрольной точки до следующей КТ
Примеры:
DebugCheckPoint("functionName");
Выведет в лог название КТ "functionName" и значения параметров времени выполнения
скрипта в этой точке. Ограничив участок кода двумя такими точками можно увидеть
время выполнения этого блока кода, изменения занятой памяти и т.д.
DebugCheckPoint("functionName",$param);
Дополнительно к предыдущему варианту выведет значение
переменной $param
DebugCheckPoint("functionName","param1=".$param1.” param2=”.$param2, 5, true, true);
Выведет в лог название КТ "functionName" и значения параметров времени выполнения скрипта
в этой точке. Дополнительно покажет значение переменных $param1 и $param2. Включит показ трассировки на 5 уровней.
Разрешит вывод лога запросов к базе данных и инклудов до конца скрипта или до
следующей КТ (на которой можно опять временно включить их вывод).