Использование класса расширенной отладки для 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 уровней. Разрешит вывод лога запросов к базе данных и инклудов до конца скрипта или до следующей КТ (на которой можно опять временно включить их вывод).