Класс расширенной отладки для InstantCMS 2.0 RC

+47
1.94K
Мощный, но лёгкий класс для расширенной отладки. Позволяет легко, наглядно и управляемо получить информацию о времени выполнения и о других параметрах php-скриптов CMS и их частей.

Данная отладка будет полезна как при тестировании и оптимизации самой CMS, так и разработчикам компонентов. А так же для выявления проблем при размещении сайтов на реальных серверах, где невозможно использовать встроенную в IDE систему отладки.
Например, с её помощью можно увидеть «тяжёлые» или ошибочные запросы, повторяющиеся подключения файлов, «задумчивые» участки кода и т.д. Можно быстрее понять какой из добавленных на сайт компонентов тормозит генерацию страниц и почему. Администраторы прямо из админки увидят «тонкие места» сервера – что именно вызывает тормоза: процессор, диски или база данных. Программисты смогут точнее понять работу CMS, посмотрев на неё «изнутри».

Настраиваемые логи отладки выводятся прямо под подвалом страницы, не изменяя саму страницу. Во многих случаях их очень удобно использовать для анализа проблем у пользователей CMS и компонентов. Достаточно попросить админа сайта включить вывод нужных операций в лог на проблемной странице и потом прислать этот лог в поддержку или выложить на форум. Также можно попросить вписать в текст нужного скрипта контрольную точку с выводом интересующей инфы (например, состояние переменных) и получить ещё более точное понимание происходящего. Эти возможности будут полезны и разработчикам системы, и сторонним программистам при поддержке их компонентов.

Возможности более подробно:

• Подсчёт параметров времени выполнения по категориям:
— Время выполнения всего скрипта
— Время выполнения кода PHP, с отдельным подсчётом количества и времени инклудов и автозагрузок классов.
— Время, затраченное на выполнение подключений и запросов к БД, а также их количество.
— Количество обращений к кэшу и время его работы отдельно по типам запросов SET и GET.
— Минимальное, максимальное и конечное использование памяти скриптом в двух режимах: реальное (блочное) выделение памяти для PHP и точный побайтовый подсчёт.

Все расчётные значения выводятся в одну наглядную итоговую таблицу.

• Собирается и выводится подробная информация по всем операциям в категориях:
— Подключения и загрузка файлов.
— Операции с БД.
— Операции с кэшем.

• Два фильтра SQL-запросов: по части SQL-строки и по вызвавшему запрос файлу/классу/функции. Они, например, позволяют выводить в лог лишь запросы из нужного класса или файла. Или только запросы к интересующей таблице.

• Два фильтра инклудов: по имени подключаемого файла и по вызвавшему подключение файлу/классу/функции. Позволяют посмотреть в логе только попытки подключения нужного файла. Или все подключения из указанного файла/класса/функции.

• Возможность в любое место любого php-файла вставлять неограниченное количество контрольных точек (КТ).
В каждой точке выводится информация о действиях скрипта и изменениях с момента предыдущей КТ (или с начала скрипта, если до этого точек установлено не было) :
— название точки (задаётся вручную по желанию),
— время выполнения,
— информация о количестве и времени обращений к БД/кэшу и инклудах, состояние и изменение памяти.

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

Вызов КТ осуществляется вставкой в текст программы вызова одной функции с параметрами или без них. То есть, очень легко и удобно.

Для более наглядного учёта КТ их количество также отображается в итоговой таблице с параметрами времени выполнения скрипта. Это позволяет легче найти и удалить КТ перед размещением на сервер.

• Есть возможность выводить лог с подробностями по любым операциям, учитываемым классом отладки, в любом сочетании типов операций. Туда же выводится и информация по контрольным точкам. Все операции выводятся в лог в той же последовательности, в которой выполняются в скрипте, одна за другой. Таким образом, можно отследить ход выполнения программы.

• Для тех типов операций, где это доступно и имеет смысл, выводятся результаты работы этих операций. Ошибки и предупреждения выделяются цветом.

• Для инклудов собирается и выводится в отдельной таблице список ошибочных инклудов и тех, которые скрипт пытался подключить 2 и более раз.

• Для всех контролируемых операций и КТ в лог автоматически выводится место вызова (файл/строка/класс/функция). Дополнительно можно включить вывод стека вызовов (трассировку вызовов) для любых отслеживаемых операций или КТ на любую заданную глубину, независимо для каждого типа операций и для каждой КТ отдельно.

• Дополнительно считается и в итоговой таблице отображается время, затраченное классом на сбор и обработку отладочной информации. А так же время работы скрипта за вычетом времени работы класса отладки.

• Вся выводимая в таблицы и в логи информация для удобства восприятия и наглядности выделяется разным цветовым оформлением.

• Есть возможность включать и выключать вывод логов обращений к БД, инклудов и работы с кэшем для любых участков кода. То есть, можно, например, посмотреть не все SQL-запросы или инклуды, а только те, которые происходят между двумя КТ. Или можно выводить все обращения к БД и/или файлам, за исключением проверенных участков скрипта.

• В КТ и вообще в любом месте любого скрипта можно посмотреть текущие значения любых параметров работы скрипта из свойств класса отладки (те, что показываются в итоговой таблице, только не на момент окончания работы, а на текущий момент).

• Информацию отладки можно показывать только администраторам или всем пользователям. Удобно при анализе проблем на работающем сайте.

• В отличие от использования echo, информация о времени выполнения и лог сначала собираются в памяти класса, а только по окончании работы скрипта выводится под созданной страницей, не меняя её внешний вид.

• Настройки отладки вынесены в отдельный конфигурационный файл, который загружается первым при старте программы. Загрузка и инициализация класса занимает несколько миллисекунд, что при отладке не влияет на время работы всего скрипта в целом.

• При отключении отладки она вообще не загружается в память и никаких обращений к ней не происходит. Выполняется лишь загрузка одного маленького конфига из файла и проверка одной глобальной константы во всех местах вызова отладки. Следовательно, работа скрипта практически не замедляется.

• Управление включением/отключением и параметрами отладки производится через вкладку «Отладка» в админке.

• Текстовые строки из настроек в админке вынесены в языковые файлы — обеспечена совместимость с любыми языками, которые будут добавляться в будущем.

• Оформление всех выводимых данных производится с помощью отдельного css-файла, хранящегося в теме. Таким образом, вывод отладки можно настроить под любую свою тему.
Более полное описание функций и использования будет добавлено позже, если у вас будет интерес к этой отладке.

Что ещё полезного и интересного можно добавить:

• Обработка хуков. Вывод требуемой информации (о заданных переменных и другой полезной) на момент до хука и после. В админке можно сделать выбор, какой хук обрабатывать (можно даже список хуков).
Но поскольку я с хуками пока не работал, то и не знаю, как и какую информацию можно собирать и выводить. Если это Вам интересно и у Вас есть понимание хуков – пишите ваше видение этого, попробую реализовать.

• Ваши предложения…


Использование точек отладки (контрольных точек):

Для вставки КТ достаточно в нужном месте кода вставить вызов функции обработки КТ. Есть два варианта.

Простой работает при наличии в 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);

Все параметры необязательные:
string $name Название точки, выводится в лог в кавычках после "CheckPoint"
string $params Строка параметров для лога, выводится без изменений
int $trace_level Глубина трассировки вызовов, 0 — выключить, -1 — по умолчанию из конфига
bool $sql_debug Временно включить показ SQL с этой контрольной точки
bool $include_debug Временно включить показ инклудов с этой контрольной точки

Примеры:
DebugCheckPoint("functionName");
DebugCheckPoint("functionName",$param);
DebugCheckPoint("functionName","param=".$param, 5, true, true);
if (DEBUG_ON) cmsDebug::getInstance()->checkPoint("functionName","param=".$param, 5, true, true);
Скачать тут

Этот вариант отладки разработан для InstantCMS 2.0 RC.
Достаточно просто распаковать содержимое архива с заменой файлов в папку с уже установленной системой и включить отладку в новом разделе "Отладка" в "Настройках" админки.

Надеюсь, этот класс отладки поможет вам более глубоко понять и протестировать новый Инстант 2.0, а также быстрее и проще разработать для него новые компоненты.
+5
Роман Роман 10 лет назад #
Полезная разработка. Спасибо!
А для первой ветки у вас аналогичное?
+3
WebMan WebMan 10 лет назад #
Для первой ветки давно была сделана версия попроще. На тот момент и в том виде она не заинтересовала разработчиков Инстанта для встраивания в релизы. А отдельным компонентом такую глубокую функциональность сделать не получится. Поскольку мне под мои проекты больше подходит вторая ветка, то я решил версию для первой ветки не доделывать и не выкладывать, чтобы не морочиться с постоянным обновлением её при выходах новых релизов 1.10. Если эта отладка реально будет нужна пользователям первого Инстанта и разработчики решат её включить в следующий релиз, я сделаю код и для первой ветки.
0
Роман Роман 10 лет назад #
Будем ждать ответ разработчиков
+4
Марат Марат 10 лет назад #
Мощно!!! Жырный плюс.
+2
Anonim Anonim 10 лет назад #
Не знаю, что это, зачем это. Но, если Марат говорит "ЖИР" то +1
0
sotastroy sotastroy 10 лет назад #
Зря минусуете. Я вот тоже не понимаю до конца что это, но раз это помогает разработчикам делать и отлаживать компоненты, и такие товарищи, как Марат(не в обиду остальным, просто других комментов на этот момент нет) плюсуют и одобряют - значит вещь стоящая и плюса однозначно заслуживает. За бесплатность отдельный респект.
0
lezginka.ru lezginka.ru 10 лет назад #
+
я даже знаю что это такое :))
хостер кричит у вас превышение лимитов....и т.д. и т.п. эта штука должна показать где/кто нагружает сайт,
WebMan я правильно понимаю политику партии функцию скрипта ?
+1
WebMan WebMan 10 лет назад #
В итоговой таблице показывается время, затраченное на дисковые операции, работу с БД, кэш и чистое php-время. Также расчитывается процент этого всего от полного времени работы скрипта. Зная ваши обычные значения при хорошо работающем сайте, вы сразу увидите отклонения конкретного времени при тормозящем сайте и сможете понять, что стало работать дольше (что тормозит).
Естественно, эта отладка не заменит штатных средств операционной системы, установленной на хостинге. Но позволит оперативно и наглядно понять узкие/нагруженные места и будет дополнительным агрументом при общении с поддержкой хостера.
+1
Крот Крот 10 лет назад #
плюсану за старания)
я тоже раньше так примерно делал, пока не настроил свой отладчик phpdesigner с xdebug
теперь можно просто поставить жирну красную точку останова и открыть в хроме(мозилле) страницу сайта
и он встанет на нужной строке. Далее можно идти по шагам(строкам) и смотреть все переменные.

по поводу профилирования вот хорошая статья
+1
WebMan WebMan 10 лет назад #
xdebug - штука хорошая. Но его не получится использовать на реальном хостинге и если проблемы именно на работающем сайте, он не поможет.
Эта отладка, конечно, не соревнуется с xdebug. Но свои плюсы она имеет. smile

Еще от автора

Хуки-хухуки: Исключаем неактивных пользователей из списков
Как иногда начинают свой монолог неопытные стендаперы: «У всех в жизни было такое …
«Расширенная отладка» для InstantCMS 2.14.1 (v.14.1.2) – большое обновление для разработчиков
Новые возможности и удобства, облегчающие разработчикам отладку компонентов и шаблонов.
Использование расширенной отладки. Часть 11. Анализ ошибок 403/404 и редиректов
Одной из неудобных задач при отладке для меня является поиск причины ошибки 403/404.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.