Класс расширенной отладки v.9 для InstantCMS 2.3.0

 

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

 

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

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

 

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

 

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

 

• Подсчёт параметров времени выполнения по категориям:

- Время выполнения всего скрипта

- Время выполнения кода PHP, с отдельным подсчётом количества и времени  инклудов, автозагрузок классов, хуков, виджетов, времени работы и памяти контроллера и рендеринга страницы, времени старта PHP на сервере (для PHP 5.4 и выше).

- Время, затраченное на выполнение подключений и запросов к БД, а также их количество.

- Количество обращений к кэшу  и время его работы отдельно по типам запросов SET и GET.

- Минимальное, максимальное и конечное использование памяти скриптом в двух режимах: реальное (блочное) выделение памяти для PHP и точный побайтовый подсчёт.

 

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

 

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

 

• Собирается и выводится в лог подробная информация по всем операциям в категориях:

- Автозагрузки классов и инклуды файлов.

- События.

- Хуки.

- Виджеты.

- Операции с БД.

- Операции с кэшем.

 

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

 

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

 

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

 

• Два фильтра лога событий/хуков: по имени события и по обрабатывающему контроллеру. Позволяют посмотреть в логе все обработки только одного выбранного события. Или все события, обрабатываемые указанным контроллером.

 

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

 

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

 

• Подсветка цветом «тяжёлых» SQL-запросов, хуков и виджетов в логах для быстрого поиска причин тормозов на сайте.

 

• Возможность в любое место любого php-файла вставлять неограниченное количество контрольных точек (КТ).

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

- название точки (задаётся вручную по желанию),

- время выполнения,

- информация о количестве и времени обращений к БД/кэшу и инклудах, состояние и изменение памяти.

 

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

 

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

 

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

 

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

 

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

 

• Для всех активных виджетов и хуков, кроме времени работы, также подсчитываются и выводятся в лог количество и время sql-запросов и инклудов, объём использованной памяти.

 

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

 

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

 

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

 

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

 

• Настраиваемая функция «Имитировать сетевые задержки» с возможностью задавать длительность «лага» в миллисекундах.

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

• Отладка довольно экономно расходует память – всего 11 килобайт при минимальных настройках. Максимальный объём зависит от включённых опций логов.

 

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

 

• Управление включением/отключением и параметрами отладки производится через новую вкладку «Отладка» в админке. Там же перед настройками в наглядном виде показываются текущие параметры отладки. Для удобства блоки опций в настройках сделаны в виде тематических вкладок.

 

• При включённой «Отладке» на каждой странице админки выводится предупреждение об этом.

 

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

 

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

 

Стандартная встроенная отладка оставлена без изменений. Только отключена функция «Имитировать сетевые задержки», так как более настраиваемый вариант этой функции включён в расширенную отладку.

Дополнительно добавлен вывод сообщения «Параметры сохранены» при успешном сохранении параметров сайта в админке.

 

Этот вариант отладки разработан для релиза InstantCMS 2.3.

Можно воспользоваться стандартным механизмом установки новых компонентов Инстанта. Или достаточно просто распаковать содержимое папки package из архива с заменой файлов в папку с уже установленной системой и  включить отладку в новом разделе "Отладка" в "Настройках" админки.

 

Внимание: этот патч изменяет некоторые системные файлы!

Если Вами уже изменялись файлы ядра, то нужно смержить изменённые файлы и потом залить их на сайт, а не пользоваться инсталлятором.

 

Надеюсь, этот класс отладки поможет вам более глубоко понять и протестировать новый Инстант 2, а также быстрее и проще разработать для него новые компоненты.