Отладка
Инструменты для отладки в Bitrix Framework помогают находить ошибки и проверять производительность сайта.
Отладка в публичной части сайта
Чтобы посмотреть статистику страницы в публичной части сайта, нажмите кнопку Отладка в панели администрирования. Статистика отобразится прямо на странице. Используйте выпадающее меню рядом с кнопкой, чтобы выбрать какие данные показывать.

Суммарная статистика
Показывает общие данные по работе страницы:
-
статистику SQL-запросов,
-
статистику включаемых областей,
-
время исполнения страницы.
Чтобы включить, нажмите на кнопку Отладка или выберите Суммарная статистика в выпадающем меню.
Статистика SQL-запросов
Показывает общее количество запросов к базе данных и время их выполнения.
-
Нажмите Отладка и в выпадающем меню выберите Статистика SQL-запросов.
-
Данные появятся в нижнем левом углу страницы.

-
Чтобы увидеть детализацию всех запросов, нажмите на ссылку Всего SQL запросов. Откроется новое окно с полным списком.

Детальная статистика кеша
Показывает объем данных, которые кешируются для страницы.
-
Нажмите Отладка и в выпадающем меню выберите Детальная статистика кеша.
-
Данные появятся в нижнем левом углу страницы.

-
Чтобы увидеть подробности, нажмите на ссылку Объем кеша. Откроется новое окно с детальной информацией.

Статистика включаемых областей
Показывает служебную информацию о работе компонентов.
-
Нажмите Отладка и в выпадающем меню выберите Статистика включаемых областей.
-
Под каждым компонентом появятся данные о его работе.
Для детального анализа компонента:
-
Одновременно включите Статистика SQL-запросов и Детальная статистика кеша.
-
Рядом с компонентом появятся ссылки
Запросов: nикеш.
-
Нажмите на любую из них, чтобы открыть подробную статистику в новом окне.
Время исполнения страницы
Показывает, за какое время сервер сгенерировал страницу.
-
Нажмите Отладка и в выпадающем меню выберите Время исполнения страницы.
-
Время выполнения отобразится в нижнем левом углу.

При одновременно отмеченных опциях Время исполнения страницы и Статистика SQL-запросов, появится ссылка Время создания страницы. Она откроет сводную статистику в новом окне.

Если дополнительно активирована Статистика включаемых областей, то в окне появится более подробная информация.

Когда включена кнопка Отладка, данные по SQL-запросам и времени загрузки также отображаются в административном разделе. Найти их можно в нижнем левом углу страницы.
Отладка SQL-запросов с помощью SqlTracker
Инструмент SqlTracker помогает отслеживать, какие SQL-запросы выполняются, сколько времени занимают и откуда вызываются. Трекер является объектом класса Bitrix\Main\Diag\SqlTracker.
Как включить трекинг
Получите объект соединения с базой данных и запустите трекер через метод startTracker().
// Получаем соединение с базой данных
$connection = \Bitrix\Main\Application::getConnection();
// Включаем отслеживание запросов
$connection->startTracker();
Как получить результаты трекинга
-
Получите объект трекера с помощью
getTracker(). -
Остановите отслеживание через
stopTracker(). -
Извлеките запросы методом
getQueries().
После вызова startTracker() и до вызова stopTracker() все SQL-запросы сохраняются. Каждый запрос представлен объектом Bitrix\Main\Diag\SqlTrackerQuery.
// Получаем объект трекера с собранными данными
$tracker = $connection->getTracker();
// Останавливаем отслеживание
$connection->stopTracker();
// Извлекаем все запросы из трекера
$queries = $tracker->getQueries();
// Перебираем все запросы, которые были выполнены в отслеживаемом участке кода
foreach ($queries as $query)
{
echo 'SQL: ' . $query->getSql() . '<br>';
echo 'Время: ' . round($query->getTime(), 5) . ' сек.<hr>';
}
Пример использования
Проанализируем запросы, которые выполняются при получении списка активных пользователей.
$connection = \Bitrix\Main\Application::getConnection();
$connection->startTracker();
// Выполняем SQL-запрос к таблице пользователей
$result = \Bitrix\Main\UserTable::getList([
'filter' => ['ACTIVE' => 'Y'],
'limit' => 5,
])->fetchAll();
$tracker = $connection->getTracker();
$connection->stopTracker();
$queries = $tracker->getQueries();
foreach ($queries as $query)
{
echo 'SQL: ' . $query->getSql() . '<br>';
echo 'Время: ' . round($query->getTime(), 5) . ' сек.<hr>';
}
Подробнее в статье Отладка запросов
Отладка сценариев с классом Debug
Класс Debug помогает записывать данные в файл и замерять время выполнения кода. Он может использоваться для отладки AJAX-запросов и CRON-задач.
Как записать данные в файл
Класс Debug предоставляет три основных метода для отладки:
-
writeToFile($var, $varName = "", $fileName = "")— записывает значение переменной в файл. Для массивов используется функцияprint_r(), а для остальных типов данных значение преобразуется в строку.-
$var— переменная, содержимое которой необходимо записать в файл. Обязательный параметр. -
$varName— имя переменной или заголовок, который добавляется перед содержимым для идентификации записи в логе. Необязательный параметр, по умолчанию — пустая строка. -
$fileName— путь к файлу относительно корня сайта. Если не задан, данные записываются в файл__bx_log.logв корне сайта. Необязательный параметр, по умолчанию — пустая строка.
use Bitrix\Main\Diag\Debug; // Запись в файл по умолчанию Debug::writeToFile($_SERVER, 'Данные сервера'); // Запись в указанный файл Debug::writeToFile($myArray, 'Мой массив', 'local/test_log.txt'); -
-
dump($var, $varName = "", $return = false)— выводит на экран структурированное представление переменной в удобочитаемом формате. Не записывает данные в файл.-
$var— переменная любого типа, содержимое которой нужно отобразить. Обязательный параметр. -
$varName— имя переменной или заголовок, который выводится перед содержимым. Необязательный параметр, по умолчанию — пустая строка. -
$return— флаг. Еслиfalse, результат выводится на экран. Еслиtrue, результат возвращается в виде строки. Необязательный параметр, по умолчанию —false.
use Bitrix\Main\Diag\Debug; // Вывод на экран Debug::dump($_SERVER, 'Данные сервера'); // Получение результата в виде строки $debugInfo = Debug::dump($myObject, 'Объект', true); echo $debugInfo; -
-
dumpToFile($var, $varName = "", $fileName = "")— комбинирует логикуdump()иwriteToFile(). Записывает в файл детальное структурированное представление переменной в формате, аналогичном функцииvar_dump().-
$var— переменная, содержимое которой необходимо записать в файл. Обязательный параметр. -
$varName— имя переменной или заголовок, который добавляется перед содержимым для идентификации записи в логе. Необязательный параметр, по умолчанию — пустая строка. -
$fileName— путь к файлу относительно корня сайта. Если не задан, данные записываются в файл__bx_log.logв корне сайта. Необязательный параметр, по умолчанию — пустая строка.
use Bitrix\Main\Diag\Debug; // Запись структурированных данных в файл Debug::dumpToFile($_SESSION, 'Текущая сессия', 'local/logs/session_dump.log'); -
Как замерить время выполнения кода
-
Ограничьте участок кода методами
startTimeLabel()иendTimeLabel()с одинаковой меткой. -
Выведите результаты всех замеров с помощью метода
getTimeLabels().
use Bitrix\Main\Diag\Debug;
// Начинаем замер времени для участка кода с меткой "foo"
Debug::startTimeLabel("foo");
someSlowFunction();
// Завершаем замер для "foo"
Debug::endTimeLabel("foo");
// Начинаем замер времени для следующего участка кода с меткой "bar"
Debug::startTimeLabel("bar");
someOtherFunction();
// Завершаем замер для "bar"
Debug::endTimeLabel("bar");
// Выводим все результаты замеров времени
print_r(Debug::getTimeLabels());