Мощный, но лёгкий класс для расширенной отладки. Позволяет легко, наглядно и управляемо получить информацию о времени выполнения и о других параметрах 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, а также быстрее и проще разработать для него новые компоненты.
Данная отладка будет полезна как при тестировании и оптимизации самой 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, а также быстрее и проще разработать для него новые компоненты.
Реклама #
Роман 11 лет назад #
А для первой ветки у вас аналогичное?
WebMan 11 лет назад #
Роман 11 лет назад #
Марат 11 лет назад #
Anonim 11 лет назад #
sotastroy 11 лет назад #
lezginka.ru 11 лет назад #
я даже знаю что это такое :))
хостер кричит у вас превышение лимитов....и т.д. и т.п. эта штука должна показать где/кто нагружает сайт,
WebMan я правильно понимаю
политику партиифункцию скрипта ?WebMan 11 лет назад #
Естественно, эта отладка не заменит штатных средств операционной системы, установленной на хостинге. Но позволит оперативно и наглядно понять узкие/нагруженные места и будет дополнительным агрументом при общении с поддержкой хостера.
Крот 11 лет назад #
я тоже раньше так примерно делал, пока не настроил свой отладчик phpdesigner с xdebug
теперь можно просто поставить жирну красную точку останова и открыть в хроме(мозилле) страницу сайта
и он встанет на нужной строке. Далее можно идти по шагам(строкам) и смотреть все переменные.
по поводу профилирования вот хорошая статья
WebMan 11 лет назад #
Эта отладка, конечно, не соревнуется с xdebug. Но свои плюсы она имеет.