Главное меню

Вкусняшки для разработчиков.

При разработке и отладке модулей бывает довольно сложно понять что же там внутри не работает, почему выводится не то, что ожидалось и тому подобное. Именно поэтому в систему встроен ряд простых, но удобных инструментов для борьбы с подобными ситуациями.

Кто может видеть отладочную информацию?

Прежде всего, конечно же, Суперадминистратор сайта. Хорошо бы чтобы только он, но некоторые ошибки воспроизводятся только из под непривилегированных пользователей, а то и вовсе из под гостевых аккаунтов. Именно для этого и предназначен

Режим отладки

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

Что посмотреть на досуге?

Итак, мы только что узнали, что развернутую информацию а работе системы можно узнать либо из под аккаунта Суперадминистратора, либо в режиме отладки. Именно в этих режимах и будут доступны нижеописанные полезности.

Консоль запросов БД.

Если (при включенном JS) на любой странице нажать Ctrl+~, то в верхней части страницы появится лог всех SQL запросов, время выполнения каждого из них и количество результатов.

 

Лог MySQL

На самом деле, в этой консоли можно выводить не только данные по mysql, в любом месте Вашего модуля вы можете вставить

PHP
Debug_HackerConsole_Main::out($var);

И в консоль добавится информация о состоянии переменной $var.

Если Вы считаете что консоль на сайте - только лишняя трата ресурсов, то Вы можете ее легко отключить в настройках сайта.

Так же, консоль автоматически отключается в случае AJAX запросов.

А как же быть в случае AJAX?

Получается что запросы в этом случае не увидеть? Способ есть. Для принудительной отладки существует

Волшебный ключик debug

Что же это такое? Это пустая (или не пустая) переменная в URL.

Если к URL

URL
http://mysite/some/path

добавить переменную debug

URL
http://mysite/some/path?debug

то скучная страница, волшебным образом, преображается - на ней отключается кэширование, выводятся запросы sql и даже появляется

Консоль шаблонизатора

При добавлении ключика debug, после загрузки страницы появляется всплывающее окно, в котором отображаются данные шаблонизатора: подключенные шаблоны, список и содержимое переменных, скорость генерации и тому подобные мелочи, приятные сердцу каждого разработчика.

 

Консоль шаблонизатора

Ошибки MySQL

Все ошибки работы с БД, которые разработчик не обрабатывает сам, считаются критическими и вызывают прерывание исполнения. Если Вы знаете что запрос моет вызвать ошибку, то можете заблокировать вывод ошибки:

PHP

if (!@Db::i()->query('...'))
{
  echo "Я знаю что мой запрос может вызвать ошибку, но это не нарушает моего чувства прекрасного;)";
}
 

В противном случае исполнение будет приостановлено, а в браузер будет выведен текст запроса, код и текст ошибки.

Все это здорово при отладке, но как быть на работающем сайте?

Хороший вопрос. В случае ошибки БД пользователю будет выведено сообщение об ошибке (не развернутое, а только о самом факте ее наличия) и предложение связаться с разработчиком. Понятно что на сообщение это пользователям глубоко плевать и в 99 случаях из 100 рекламаций от пользователей Вы не дождетесь. Но этого и не требуется - движок сам отправит развернутую информацию об ошибке по адресу, который указан в настройках сайта.

Что же это получается, "упала БД" и у меня полный ящик сообщений?

Конечно же нет. Одинаковые сообщения об ошибке движок не шлет - считается что до разработчика должно дойти с первого раза:) Более того, если в запросе меняются параметры, то это все равно остается тот же запрос. Например, если запросы

MySQL
SELECT * FROM table WHERE foo=10 AND bar='beer'

и

MySQL
SELECT * FROM table WHERE foo=11 AND bar='vodka'

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

Вот вроде бы и все.

Удачной разработки!

 

Всего комментариев: 0

Имя*:

Email: