Debugging - uniqcle/Bitrix GitHub Wiki
Bitrix\Main\Diag\Debug
С помощью Bitrix use Bitrix\Main\Diag\Debug;
define('LOG_FILENAME', 'local/log/debug'. date("dmY"). '.log');
$arResult = [
'URL' => 'ya.ru'
];
$debuggingInfo = date('d-m-Y'). ' отладочная информация';
// 1. в лог
Debug::writeToFile($arResult, $debuggingInfo, LOG_FILENAME);
// 2. по-умолчанию в файл /__bx_log.log
Bitrix\Main\Diag\Debug::dumpToFile($arResult, $debuggingInfo, LOG_FILENAME);
//3. По умолч. в const LOG_FILENAME
// https://dev.1c-bitrix.ru/api_help/main/functions/debug/addmessage2log.php
AddMessage2Log($arResult);
//4. На экран
Bitrix\Main\Diag\Debug::dump($arResult, $debuggingInfo);
Замер скорости выполнения кода
use Bitrix\Main\Diag\Debug;
Debug::startTimeLabel('SomeLabel');
$sum = 0;
for($i = 0; $i < 1000; $i++){
$sum += $i;
}
echo $sum;
Debug::endTimeLabel('SomeLabel');
Debug::dump( Debug::getTimeLabels());
Получение стека вызова функций
// в init.php Отслеживает каким файлы подключаются
use Bitrix\Main\Diag\Helper;
use Bitrix\Main\Diag\Debug;
$trace = Helper::getBackTrace();
Debug::dump($trace);
Отладка SQL-запросов
use Bitrix\Main\Diag\Debug;
$connection = Bitrix\Main\Application::getConnection();
$tracker = $connection->startTracker();
$query1 = Bitrix\Iblock\ElementTable::getList([
'select' => array('ID', 'NAME'),
'filter' => array('IBLOCK_ID' => 6)
]);
$connection->stopTracker();
Debug::dumpToFile($query1->getTrackerQuery()->getSql(), "sql_dump", '/local/log/sql_dump.log');
Debug::dumpToFile($query1->getTrackerQuery()->getTime(), "sql_dump", '/local/log/sql_dump.log');
//или так. Если несколько запросов нужно отследить
foreach ($tracker->getQueries() as $query) {
Debug::dumpToFile($query->getSql(), "sql_dump", '/local/log/sql_dump.log'); // текст запроса
Debug::dumpToFile($query->getTrace(), "sql_dump", '/local/log/sql_dump.log'); // стек вызовов функций
Debug::dumpToFile($query->getTime(), "sql_dump", '/local/log/sql_dump.log'); // время выполнения запроса
}
debug functions
// Вывод для админа
global $USER;
if ($USER->IsAdmin()){
debug($arResult['ITEMS']);
}
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/UserFields.log", var_export($arEl, true)."\n\r", FILE_APPEND | LOCK_EX);
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/StatusEXTERNAL.log", var_export($UserXml, true)."\n\r", FILE_APPEND | LOCK_EX);
$begin = microtime(true);
// какой-то код, который по вашему времени может выполняться долго
echo microtime(true) - $begin;
Установка XDebug на Bitrix VM
- Manage pool web servers
- Manage PHP extensions
- Enable xdebug extension reboot server > systemctl restart httpd
in PhpStorm
Settings -> PHP -> CLI Enterpretier -> + SSH
/etc/php.d/z_bx_conf.ini
xdebug.log = /var/log/xdebug.log
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.client_port = 9003
xdebug.idekey = PHPSTORM
xdebug.mode = debug
xdebug.collect_params = 3
xdebug.log_level = 0
xdebug.client_host = 195.49.168.246 # Проверить IP компа https://www.myip.com/
systemctl restart httpd
Run
Start Listening for Php Debug Connections
Все! Устанавливаем breakpoints и работаем.
https://aclips.ru/xdebug-bitrix24/