«Расширенная отладка» для InstantCMS 2 – описание возможностей

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

Данная «Отладка» будет полезна как начинающим пользователям для изучения работы InstantCMS 2, так и опытным разработчикам компонентов/шаблонов при создании и тестировании своих продуктов. А так же всем пользователям CMS для выявления проблем при размещении сайтов на реальных серверах, где невозможно или неудобно использовать xDebug или подобную систему отладки.

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

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

С версии 14.1 устанавливается как компонент и работает в двух режимах: стандартном (на основе данных ядра "из коробки") и полнофункциональном (с патчами ядра для сбора дополнительных данных). Описание режимов работы вынесено отдельно.

Информация актуальна для версии отладки 14.1.2 и выше.
Больше скриншотов можете посмотреть на странице "Расширенной отладки" в "Каталоге дополнений".

Основная (суммарная) таблица


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

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

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

• Есть сокращённый вариант суммарной таблицы — самая важная информация в одну строку. Выбор варианта производится опцией в настройках отладки. Переключение вида можно также произвести "на лету" прямо на странице двойным кликом в любом свободном месте таблице.


Лог операций

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


• Собирается и последовательно выводится в лог подробная информация по всем операциям в категориях:
— Автозагрузки классов и инклуды файлов.
— События.
— Хуки.
— Виджеты.
— Операции с БД.
— Операции с кэшем.
— Работа контроллера.
— Инициализация и рендеринг шаблонов.
— События отладки.
— Контрольные точки.

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

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

• Поскольку данные и результаты операций часто бывают объёмными, можно на вкладке "Вид" включить режим автоматического сворачивания больших блоков с данными до небольшого размера. Кликом мышки по надписям 'Data/Result' над блоками можно свернуть или развернуть любой блок в любой момент.

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

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

• Для всех парных строк есть возможность поиска пары (перехода к ней) кликом мышки по надписям '(start)/(end)' возле имени лога или по области выделения пары в самой левой части строки лога. При наведении курсор меняет свою форму на стрелку или стрелки вверх/вниз (зависит от браузера).


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


• Опционально настраивается отступ многоуровневого лога (при значении 0 отступ убирается), вывод дополнительной информации операций, показ цветных рамок операций в логе, сворачивание больших блоков данных и результатов, сворачивание панели текущих настроек.

Фильтры

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


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

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

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

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

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

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

• Три фильтра лога обращений к кэшу: по типу (SET/GET), по ключу и по вызвавшему обращение файлу/классу/функции.

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



Таблицы с дополнительной информацией

На вкладке "Таблицы" в "Настройках" отладки можете выбрать дополнительные таблицы по разным категориям операций. Они будут показаны после основной таблицы, перед логом.


• Для каждого инклуда выводится тип подключения, количество попыток, суммарное время на их выполнение и признак ошибки (если были ошибки).

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

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

Цветовая подсветка

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

• Есть подсветка цветом синтаксиса SQL-запросов.


• Есть цветовая подсветка выводимых значений переменных, данных и результатов операций (массивов / объектов / индексов / типов / значений) с автоматическим определением типа информации.


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

Контрольные точки

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

  1. dbg('Название КТ', $переменная_или_выражение_для_вывода);
  2. - или просто -
  3. dbg($переменная_или_выражение_для_вывода);
• В КТ можно выводить в отладочный лог значения любых переменных и другие параметры работы скрипта. Значения переменных выводятся в наглядном виде, с автоматическим определением типа переменной и с цветовой подсветкой основных моментов.

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

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

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

Например, две КТ в методе content->route() выведут такую инфу.
  1. public function parseRoute($uri){
  2.  
  3. $action_name = parent::parseRoute($uri);
  4.  
  5. if (!$action_name && $this->cms_config->ctype_default){
  6. $action_name = parent::parseRoute($this->cms_config->ctype_default[0] . '/' . $uri);
  7. }
  8.  
  9. dbg('$uri', $uri);
  10. dbg('$action_name', $action_name);
  11.  
  12. return $action_name;
  13. }

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

Подробнее про использование контрольных точек.

Табличные контрольные точки

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

• Данные ТКТ не выводятся сразу, а собираются в массивы и выводятся в наглядные таблицы после лога.

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

Подробнее про использование табличных контрольных точек.

Перехват ошибок (с версии 14.0 отключён)

• Перехватываются ошибки PHP в двух режимах строгости.

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

• Для каждой ошибки PHP по возможности выводится дополнительная информация: номер ошибки, описание, место возникновения (файл, строка, функция), трассировка.

• Опциональный вывод контекста ошибки PHP (определённые на данный момент переменные и массивы, в том числе и серверные, а также все созданные объекты).

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

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

Дополнительные возможности

• Перехват редиректов и вывод отладочной информации перед ними.

• Вывод отладочной информации на страницах ошибок 403 (Доступ запрещён) и 404 (Не найдено).

• Вывод отладочной инфы в модальных окнах (настройки виджетов на фронте и в Админке, настройки главной страницы Админки, настройки таблиц, фильтров, порядка категорий и т.п.), кроме окон на JSON-ответах.

Подробнее про анализ редиректов и ошибок 403/404, а также про вывод в модальных окнах.

• Вывод текущих настроек отладки на панель над формой настроек.

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

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

Будьте внимательны! В некоторых случаях отладка может выводить на экран критичные для безопасности данные. Не отключайте на продакшене опцию "Показывать отладочную информацию только администраторам", тем более вместе с включённой опцией "Выводить в лог данные и результаты"!


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

• Сделан перевод на русский и английский языки надписей или подсказок везде, где это имеет смысл. Языковые константы вынесены в отдельные файлы.

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

• Стандартная встроенная отладка оставлена без изменений.

Настройка

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

• Также для удобства на странице настроек сайта присутствуют ссылки на страницу настроек «Расширенной отладки».


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

• При отключении «Отладки» она вообще не загружается в память и никаких обращений к ней не происходит, работа скрипта не замедляется.

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

Установка

Устанавливается обычным пакетом через Админку сайта. Никаких изменений в базе данных, кроме стандартной записи о новом компоненте не производится. Заменяется один системный файл – класс отладки /system/core/debugging.php, а в системные папки добавляются класс конфига отладки и сам конфиг. Поэтому при установке через Админку будет показано предупреждение про изменение системных файлов – это нормально.
При желании получить полнофункциональный режим, нужно вручную (или через пакет) заменить некоторые файлы ядра на модифицированные. Если вы уже изменяли для себя какие-то из этих файлов, то сделайте сравнение моих версий с вашими файлами и внесите изменения в свои файлы вручную.

При удалении «Расширенной отладки» с сайта нужно:

1. Удалить её как обычный компонент, включая ручное удаление всех её файлов по списку, выводимому в Админке после окончания удаления.
2. Скопировать файл /system/core/debugging.php из архива установщика InstantCMS 2 вашей версии в папку /system/core, заменив им версию от «Расширенной отладки».
3. Если использовались патчи полного режима, то заменить модифицированные файлы ядра на оригинальные файлы вашей версии InstantCMS 2.

Дальнейшая поддержка «Расширенной отладки»

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

Скачать компонент можно в Каталоге



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


Данное описание буду стараться поддерживать в актуальном состоянии при выходе новых версий.

Надеюсь, эта «Расширенная отладка» поможет вам более глубоко понять и протестировать новый Инстант 2, а также быстрее и проще разработать для него новые компоненты.
0
WebMan WebMan 8 лет назад #
Это просто пост с актуальным суммарным описанием возможностей "Отладки". Чтобы можно было на него ссылаться из других постов про обновление версий или из "Каталога дополнений", а не прикреплять каждый раз архив с вложенным файлом описания.

Еще от автора

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