Класс расширенной отладки 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, а также быстрее и проще разработать для него новые компоненты.