Использование расширенной отладки. Часть 9. Часто задаваемые вопросы

+18
4.16K
Иллюстрация

Ответы актуальны для крайней версии «Расширенной отладки».

Влияет ли «Расширенная отладка» на функционирование InstantCMS 2?

«Расширенная отладка» не оказывает влияния на работу функций CMS и её компонентов. Она только ведёт учёт происходящих в системе действий.

Какие изменения вносит «Расширенная отладка» в систему?

«Расширенная отладка» не изменяет базу данных, кроме добавления стандартной записи о новом установленном компоненте.
Начиная с версии 14.1 отладка может работать в двух режимах: стандартном — практически без изменения ядра, и полном — с патчами ядра для сбора дополнительных отладочных данных. Подробнее про режимы и изменяемые файлы можете почитать на странице описания режимов.

Установил отладку, но информации отладки на сайте не вижу. Что не так?

1. Проверьте настройки отладки в Админке. Должна быть включена галка «Включить режим отладки» на вкладке «Общие» страницы настроек отладки или на вкладке "Отладка" страницы настроек сайта.
2. Убедитесь, что вы смотрите страницу под пользователем с админскими правами на сайте. Или отключите галку «Показывать отладочную информацию только администраторам», если вам нужно смотреть информацию отладки под обычным пользователем или гостем.
3. Убедитесь, что «Расширенная отладка» включена на странице "Компоненты" в Админке.
4. Если есть таблицы, но не видно лог, проверьте, какие категории лога выбраны для показа на вкладке "Общие". Если выбрано показывать только точки отладки dbg(), а вы их не ставили на страницу, то лог будет пустым. Выберите другие интересующие вас категории лога или просто отметьте чекбокс "Все".

Пустой/белый экран вместо страницы, нет возможности зайти в настройки "Расширенной отладки" и включить её. Что делать?

Очень хороший ответ по решению ситуации с помощью встроенной отладки дал r2 в статье Тайна “белого экрана”.
Для вывода на экран текста ошибок PHP также можно использовать и расширенную отладку, если она установлена. Обе отладки включаются одинаково опцией 'debug' в файле /system/config/config.php:
  1. 'debug' => 1,
В некоторых особо трудных случаях можно разрешить показывать информацию всем, а не только админу, включить стандартный вывод ошибок и временно отключить уведомления админа. То есть, в файле настроек «Отладки» /system/config/debugx.php выставить следующие параметры так:
  1. 'debug_admin_only' => '',
  2. 'debug_on_error' => 1,
  3. 'error_display' => 1,
  4. 'error_critical_mail' => '',
  5. 'error_critical_msg' => '',
  6. 'error_critical_notice' => '',

Где посмотреть описание опций "Отладки" для ручного редактирования файла настроек?

Все опции файла конфига /system/config/debugx.php описаны в файле /system/core/debugxconfig.php в примечаниях элементов массива $cfg_default.

Почему некоторые цифры в дефолтной и расширенных отладках различаются?

В расширенной отладке некоторые значения отличаются от значений стандартной отладки, Например:
1. Время выполнения скрипта показывается чуть точнее. Во-первых, фиксация времени окончания работы скрипта происходит реально после выполнения всех действий скрипта, а не почти в конце. Во-вторых, учитывается и вычитается из времени страницы время отладки. Разница в показаниях дефолтной отладки и расширенной может составлять около 1-3%. Для большинства случаев это не критично, но иногда знать точные цифры нужно.
Дополнительно выводится время загрузки PHP-модуля Апача.
2. Объём используемой памяти PHP-скрипта в дефолтной отладке показывается на момент окончания работы скрипта. Точнее, на момент чуть раньше окончания. В расширенной отладке основное отображаемое значение памяти – это пиковое (максимальное) за всё время работы скрипта. Так как во время работы часто бывают ситуации, когда память сначала выделяется, а потом очищается и забирается из использования, то судить о потреблении памяти лучше по пиковому значению — это позволит точнее планировать требуемую память при покупке хостинга.
Кроме того, нужно учитывать, что память выделяется сервером поблочно. В расширенной отладке дополнительно выводятся блочные значения памяти.
Кроме пикового, в расширенной отладке отображаются также начальное и конечное значения памяти.

Почему отладочная информация не показывается при запросе данных аяксом и при выполнении задач в планировщике?

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

В «Расширенной отладке» можно посмотреть список всех зарегистрированных обработчиков событий (хуков) и список всех произошедших на странице событий. А как получить список всех событий, доступных в InstantCMS 2?

В зависимости от набора используемых вами компонентов, список возможных событий будет разным. Чтобы узнать, какие события вообще могут возникать в вашем экземпляре системы, нужно по её php-файлам сделать поиск строки 'cmsEventsmanager::hook'. Вы увидите все места, откуда вызываются хуки и названия этих хуков. Автоматически сканировать файлы и создавать такую таблицу при работе отладки на сайте неразумно, поэтому и не делается.

У меня другой шаблон (не default). Информация об отладке выводится некрасиво

«Расширенная отладка» поддерживает наследование шаблонов. Её шаблоны и стили оформления находятся в дефолтной теме в папке /templates/default/controllers/debugx и используются для всех шаблонов. Скопируйте нужные файлы оттуда в свою тему и откорректируйте вывод и стили под свои нужды.

Что произойдёт, если стандартным образом обновить CMS с уже установленной расширенной отладкой?

При обновлении движка, не заменяющем файл класса расширенной отладки /system/core/debugging.php новым дефолтным классом, расширенная отладка продолжит работать в стандартном или смешанном режиме в зависимости от наличия патчей ядра для сбора отладочных данных и от изменений в обновлённом движке. Но для полноценной работы «Расширенной отладки» нужно будет обновить её до новой версии. То есть, больших проблем не будет.
Если при обновлении движка будет заменён файл класса расширенной отладки /system/core/debugging.php и при этом останутся патчи ядра полного режима отладки, то появятся ошибки при работе дефолтной отладки. Решить эту проблему может только разработчик движка (Fuze), добавив «в коробку» механизм выбора встроенной или альтернативной отладки.
Поэтому перед обновлением движка восстанавливайте дефолтные файлы ядра, как написано на странице описания режимов работы.

После обновления движка InstantCMS 2 появились ошибки в дефолтной и в расширенной отладке

Скорее всего при обновлении был заменён файл класса расширенной отладки /system/core/debugging.php на новый дефолтный. Нужно заменить дефолтный файл на "расширенный" подходящей версии.

Как установить «Расширенную отладку»?

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

Как удалить расширенную отладку с сайта?

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

Будет ли «Расширенная отладка» бесплатной и далее?

Да.

Выход новых версий и поддержка «Расширенной отладки»

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

Зачем тебе (WebMan-у) это нужно?

Не хочу показаться пафосным, но скажу, как чувствую:
Хочу отблагодарить разработчиков Инстанта по мере своих возможностей небольшим вкладом в развитие этой прекрасной CMS.
Хочу помочь лучше разобраться в InstantCMS 2 вебмастерам и программистам. Да и сам походу её изучаю.
Хочу помочь разработчикам сторонних компонентов и шаблонов сделать их продукты качественнее. Я тоже покупаю сторонние разработки и пользуюсь бесплатными компонентами для Двойки, поэтому заинтересован в том, чтобы толковых разработчиков было больше.

Чем я могу помочь «Расширенной отладке»?

1. Пользуйтесь отладкой и сообщайте мне об обнаруженных ошибках.
2. Предлагайте новые идеи и решения. Если они будут интересны и важны, я постараюсь добавить их в «Отладку».
3. Если хотите, чтобы «Расширенная отладка» вообще не изменяла файлы ядра для облегчения установки/удаления отладки и обновления ваших сайтов – попросите разработчика Инстанта Fuze добавить в движок механизм выбора варианта отладки и сбор дополнительных данных из ядра. Свои варианты кода для этого я ему предоставил, но готов использовать любой другой вариант — лишь бы он был.
4. Оставьте честные отзывы и поставьте оценку на странице «Расширенной отладки» в «Каталоге дополнений».

У меня есть вопрос по «Расширенной отладке». Как мне получить на него ответ?

Задайте его в этой или другой подходящей теме по использованию отладки в комментариях или в личном сообщении мне на этом сайте. Если Ваш вопрос будет полезен многим людям, я добавлю его в эти «ЧаВо».
0
vikont vikont 8 лет назад #
Прекрасная разработка и очень нужная! Огромное вам спасибо за такой труд, ваши описания работы дополнения вообще супер!
Не хочу показаться неблагодарным, но есть некоторые нюансы в работе вашего дополнения влияющие на работу сайта!
У меня стоит шаблон NEWS Олега Васильевича, который для работы шаблона изменил файл /system/controllers/content/widgets/list/options.form.php
Вы тоже вносите изменения в этот файл. В итоге шаблон теряет часть своих функций.
Как вас помирить?
Вот его вариант кода
Спойлер
Еще есть проблема со страницей виджетов в админке, влияние других расширений, подскажите как это исправить
Спойлер
0
vikont vikont 8 лет назад #
Со страницей виджетов я уже разобрался, помогите помирить ваш класс расширенной отладки с шаблоном.
0
Loadырь Loadырь 8 лет назад #
Добавьте после строки
Код PHP:
  1. public function init($options=false) {
этот код
Код PHP:
  1. // >> <WebMan> - optim
  2. if (cmsCore::getInstance()->uri_controller <> "admin") {$options=false;}
  3. // << </WebMan> - optim
+1
WebMan WebMan 8 лет назад #
vikont, когда Вы сообщаете о возможных ошибках "Отладки" или задаёте вопросы по её использованию, Вы не "неблагодарны", а наоборот, помогаете мне и всем, кто пользуется этой разработкой. Спасибо!

По первому вопросу. Добавленная мной в файл /system/controllers/content/widgets/list/options.form.php строка
Код PHP:
  1. // >> <WebMan> - optim
  2. if (cmsCore::getInstance()->uri_controller <> "admin") {$options=false;}
  3. // << </WebMan> - optim
относится не к "Отладке", а к оптимизации. Она отключает запрос опций виджетов в Админке, так как этот класс выполняется очень долго, а в Админке виджетов пока нет. За счёт этого работа Админки ускоряется раза в полтора в зависимости от страницы, а это важно.
Loadырь подсказал Вам правильно. Спасибо!

По второму. У Вас не загружаются языковые константы от модулей Unilang и Onliner. Проверьте наличие в Вашей системе файлов переводов \system\languages\ru\controllers\unilang\unilang.php и \system\languages\ru\controllers\onliner\onliner.php и присутствие в них констант с Вашего скрина.
0
vikont vikont 8 лет назад #
Спасибо и вам и Loadырь!
В свете двойного использования файлов системы разными расширениями прошу подсказать как поступить с файлом bootstrap.php?
Этот файл правите и вы и Иван Шкута в компоненте UniLang
Вот его файл
Спойлер
Конечно было бы идеально, если бы разработчики не трогали системные файлы, потому, что таких накладок становится все больше! А значит "запороть" сайт для неискушенного в программировании пользователя не составляет труда.
Сам движек ICMS2 очень интересный, спасибо разработчику и всем кто старается расширить его возможности! Но может быть есть смысл подумать как сделать, чтобы любые расширения не затрагивали системные файлы. Думаю от этого интерес к ICMS2 станет еще больше.
+1
WebMan WebMan 8 лет назад #
r2 когда-то давно предлагал сделать "Расширенную отладку" в виде компонента, чтобы не трогать системные файлы. Но, к сожалению, это просто технически невозможно, так как часть системных действий (запросы к БД, инклуды и т.д.) должны быть "обёрнуты" в вызовы функций отладки для регистрации этих действий. Так что иного способа, кроме хака некоторых системных файлов, нет. Именно поэтому будет очень хорошо, когда "отладка" будет встроена в систему "из коробки".

По bootstrap.php. Ваш код аналогичен оригинальному файлу системы, без каких либо изменений. Можете смело заменить его на файл из отладки. Либо уточните, какие именно правки этого файла сделаны в компоненте UniLang.
0
Старый балбес Старый балбес 8 лет назад #
WebMan:
r2 когда-то давно предлагал сделать "Расширенную отладку" в виде компонента, чтобы не трогать системные файлы. Но, к сожалению, это просто технически невозможно,
Это проще чем даже возможно думать.
Я для магазина gen-cart выполняю любые мне желаемые действия с системой , не трогая ( не изменяя положение и содержание реального файла.
Использую класс vqmod.
Класс создает копию системного файла ( с измененными данными ) в кеше vqmod.Система будет работать с клонами файлов, И после обновления версии системы достаточно первой инициализации для создания нового клона.
.Все просто и замечательно . Достаточно чтобы разработчик ICMS постоянно следовал правилам привязки. То есть если в vqmod ранее была привязка к точке начала изменяемого фрагмента строки // initial lib , а в обновленной версии файлов этого сегмента привязки нет, то нужно просто переписать XML файл с новой привязкой.
// install new lib
Проще пока не встречал.
Есть много толкований в плане проблем. Но это очевидно. Все что найдено в коде - и не заменено вызовет неработоспособность , даже если замена частична.
Если тема интересует разработчиков ->
Инструмент для установки и редактирования vqmod xml могу дать безвоздмездно для системы Icms >2
Этот инструмент будет в моей магазине и будет занимать самое важное место, если разработчики ICMS не смогут в текущий период разработки (новой) системы соответствовать определенным требованиям стороннего разработчика.
Систему нельзя и не нужно удерживать в развитии, При разной поляризации видение развития путей системы , не достаточно удерживать разработчика на уровне типа полей (*) .
Нужно создать базовые точки отступа от базового сценария , на начальном этапе подключения библиотек это просто необходимо.
Возможность другой измененной инициализации это необходимость.
И решение с моно-системой немного начнет развиваться в сторону проектирования конкурентных систем .
+1
WebMan WebMan 8 лет назад #
С vqmod не работал. Видимо, интересная штука. Появится в InstantCMS 2 - попробую. Но сейчас его поддержки в Двойке нет. И опять всё упирается в согласие и желание разработчиков. Во встраивание vqmod в систему и в установку ими правил для работы через него. Если они предоставят такую возможность - тогда действительно можно будет сделать "Отладку" компонентом почти без хаков. Как, впрочем, и многое другое. А пока хаки - единственный вариант, к сожалению.

Кроме того, vqmod всё равно не решит вопрос о точном учёте начальных параметров работы, например. Он не позволит без хака зафиксировать стартовое время и начальное значение памяти. Или загрузить класс отладки ДО любых действий системы. Сейчас это делается в самых первых строчках index.php. Так что его всё равно придётся хакать даже при использовании vqmod. Или, например, вывод итоговой инфы отладки осуществляется через тот же index.php. Тоже нужен хак. Или нужно встраивание в систему "из коробки" поддержки "Отладки". Но тогда зачем делать частично? Что мешает сразу эту "Отладку" встроить целиком? Она ведь полезна и не снижает скорость работы.
0
Старый балбес Старый балбес 8 лет назад #
Но сейчас его поддержки в Двойке нет. И опять всё упирается в согласие и желание разработчиков. Во встраивание vqmod в систему и в установку ими правил для работы через него.
НЕ нужно согласие разработчика, автономно процесс идет, и класс управляет системой а не наоборот.
VQMOD располагается в своей директории и система к нему не имеет никакого отношения. Это Класс виртуализации файлов влияет на систему.
Создается директория vqmod , в ней запускается класс instal класса рекурсивной обработки файлов ugrsr.class,: который делает изменения во всех файлах которые указаны для ( поиск-изменение) ,
Пример паттерна
Код PHP:
  1. # находит require_once и заменяет на паттерн require_once(\'/vqmod/vqmod.php\');
  2. $u->addPattern('~// Устанавливаем кодировку~', '
  3. require_once(\'/vqmod/vqmod.php\');
  4. VQMod::bootup();
в системе icms достаточно найти все include или include_once и изменить на перехват vqmod обработкой.
0
Старый балбес Старый балбес 8 лет назад #
Сейчас это делается в самых первых строчках index.php.
Вот это и решается без проблемно для РЕАЛЬНЫХ файлов. Твоя задача как разработчика поддержка версий. А запуск на изменение( то есть создание виртуальных копий любых файлов с твоими изменениями делается в одном XML файле) . Реально в системе как таковой нименяеися ни один файл. VQMOD будет работать с копиями этих файлов. Быстродействие тоже самое- чтение файла ( или реального или измененного из директории кеша) какая разница? Небольшая временная правка на обработку класса будет, это чтение массива кеш ( измененных) файлов.
.
0
WebMan WebMan 8 лет назад #
Вы знаете лучше. Я только просмотрел несколько статей про vqmod, поэтому не претендую на истину. smile
Ради одной отладки городить ещё и vqmod смысла, наверное, нет. А если его будут использовать несколько компонентов, каждый будет вносить свои правки в одни и те же файлы - тогда как будет работать? А если эти правки ещё и окажутся несогласованными?
0
Старый балбес Старый балбес 8 лет назад #
Ради одной отладки городить ещё и vqmod смысла, наверное, нет.
Смысл появится, если в официальном дистрибутиве - Вашего решения не будет,
WebMan !
ВЫ видимо должны ваше решение оставить на рабочем уровне, без правок файлов.
Ваше решение довольно хорошее для начинающих программистов, безусловно оно поможет в выяснении определенных причинных проблем.
Я подготовлю рабочий сценарий и покажу Вам .
0
WebMan WebMan 8 лет назад #
Спасибо! Жду в личку.
0
Старый балбес Старый балбес 8 лет назад #
Отправил. Решение без wqmod. Используя класс поиска и замены строк в файлах.
0
maxisoft maxisoft 8 лет назад #
на сколько я помню vqmod делает замену в файлах на лету то есть при include и requre, при этом он делает поиск и замену по тексту файла. Все эти операции будут давать погрешности при расчете выполнения скриптов, и эти манипуляции нужно будет как то компенсировать, ну или просто не обращать внимание на не точные данные.
0
WebMan WebMan 8 лет назад #
А не при инициализации ли он делает замены и потом сохраняет изменённые файлы в свой кэш, запуская их потом оттуда? В любом случае, старт системы и загрузка всех файлов фактически происходит через него.
0
maxisoft maxisoft 8 лет назад #
да вы правы просто немного подзабыл уже, ибо vqmode очень часто используется на opencart. там первая инициализация происходит при загрузке страницы а потом используются закешированые файлы.
0
Старый балбес Старый балбес 8 лет назад #
там первая инициализация происходит при загрузке страницы
Создание кеш файла происходит один единственный раз, при первом проходе по подключению файла .Или при принудительном вызове метода класса для обработки нового XML
Но не при каждой загрузке страниц.
В дальнейшем класс vqmod при чтении файла , отдает файл клон из файла списка checked.cache. Единственное затраченное на это время
это нахождение элемента файла в массиве списка кеш файлов. Если принять во внимание что в разработке WebMan используется допустим 1 замена в одном файле, то время погрешности будет постоянным и очень маленьким чтобы брать это во внимание.

Еще от автора

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