Отладка кода в Albireo CMS
Вывод произвольных данных
Функция pr() используется для быстрого вывода в браузер любых данных.
pr(getPageData()); pr(SITE_URL); pr($_COOKIES, BASE_DIR);
Функция обрабатывает данные для безопасного вывода в браузер. Для получение «сырых» отформатированных данных, используйте prMakeStr(), она делает тоже самое, только не выводит данные в браузер:
$out = prMakeStr(getPageData()); echo '<div>' . $out . '</div>';
Запись в log-файл
Функция saveLogFile() позволяет записывать произвольные данные в лог-файл. Перед тем, как использовать функцию, следует объявить константу безопасности ALLOW_SAVE_LOGFILE, без неё функция ничего не делает.
// объявить константу безопасности только для локального сервера
if (LOCALHOST) define('ALLOW_SAVE_LOGFILE', '');
// запись в файл любых данных
saveLogFile(BASE_DIR . 'log.txt', getPageData(), SITE_URL, $_POST);
Обратите внимание, что имя файла указывается в полном формате, поэтому функция потенциально небезопасная и предназначена строго для разработчиков для тестирования. На рабочем сайте её не следует использовать (поэтому константа ALLOW_SAVE_LOGFILE используется как дополнительная страховка).
Замеры производительности функции
Для оценки времени выполнения и потребления памяти, используются несколько функций:
debugBenchmarkStart('метка')— начало замераdebugBenchmarkEnd('метка')— конец замераdebugBenchmarkOut()— вывод результата
Перед использованием этих функций следует определить константу DEBUG_BENCHMARK, например в файле website/base-constants.php:
// включение отладки
define('DEBUG_BENCHMARK', '');
Без константы DEBUG_BENCHMARK фактически замеров не происходит, что позволяет использовать один и тот же код на LOCALHOST и реальным сайте.
// можно вручную определить константу по месту тестирования
# define('DEBUG_BENCHMARK', '');
function myTest()
{
// начало замера
// в качестве метки используем имя функции
debugBenchmarkStart(__FUNCTION__);
// код, который необходимо измерить
// конец замера
debugBenchmarkEnd(__FUNCTION__);
}
// выполнение функции
myTest();
// вывод собранной информации
debugBenchmarkOut();
Вывод происходит в браузер примерно в таком виде (время и php-память):
Array ( [myTest] => 0.0007 ) 0.0129s/0.537Mb
Если по какой-то причине, вывод результата тестирования в браузер нежелателен (например при обработке post-запросов), то вывод можно сохранить в log-файл:
// путь к файлу указывается в полном формате debugBenchmarkOut(BASE_DIR . 'my-log.txt');
Можно использовать множество меток и их комбинации, которые будут выведены через debugBenchmarkOut() по мере их накопления.
// В коде
debugBenchmarkStart('database_query');
// Выполнение запроса к базе данных
debugBenchmarkEnd('database_query');
debugBenchmarkStart('file_processing');
// Обработка файлов
debugBenchmarkEnd('file_processing', 'processing complete');
// Вывод результатов
debugBenchmarkOut();
Замеры времени выполняются через php-функции hrtime(), а потребление памяти через memory_get_usage() для всего сайта.
Трассировка функций
С помощью трассировки можно отследить цепочку вызова текущей функции. Для этого используется debugTrace(), которая представляет собой оболочку над стандартной php-функцией debug_backtrace().
function myTest()
{
debugTrace();
}
При выполнении myTest() появится список php-файлов, функций, которые привели к вызову этой функции:
file: pages/core/debud.php
function: myTest
line: 113
file: system/functions/file/requireSafe.php
function: require
line: 43
arg 0: core/debud.php
...
При необходимости можно ограничить число вызовов:
// только 3 последних вызова функций debugTrace(3);
Используйте debugTrace() для отслеживания сложных цепочек вызова.
Сбор отладочных данных
Функции debugAdd() и debug() используются для сбора данных для быстрой отладки. Например если нужно отследить значение переменных. Функции автоматически отслеживают последний вызов функции в цепочке вызова.
Функция debug() выводит произвольные данные как есть.
function my1()
{
$a = 10;
$b = 20;
$c = 30;
debug($a + $b + $c, $a * $b * $c);
}
my1();
Будет вывод в браузер:
#1. my1() from «pages/core/debud.php» (line 163) 1: 60 2: 6000
При необходимости можно добавить другие данные перед использованием debug() с помощью debugAdd():
function my2()
{
$a = 10;
$b = 20;
$c = 30;
debugAdd($a, $b, $c);
debug($a + $b + $c, $a * $b * $c);
}
my2();
Результат:
#2. my2() from «pages/core/debud.php» (line 207) Stack 1: 10 Stack 2: 20 Stack 3: 30 1: 60 2: 6000
Отладочная панель Albireo CMS
Функция debugPanel() используется в шаблоне Albireo CMS и служит для автоматического вывода произвольных данных на сайте.
debugPanel('Произвольное сообщение');
debugPanel(['Адрес сайта' => SITE_URL]);
Для отключения вывода панели используется ключ конфигурации debug:
// вывод панели только для локального сайта 'debug' => LOCALHOST,
С помощью debugPanel() можно выводить любые данные, на которые следует обратить внимание вебмастеру. Например через эту панель будут выводиться сообщения об отсутствующем языковом переводе фраз.