Debugging - uniqcle/Bitrix GitHub Wiki

С помощью Bitrix Bitrix\Main\Diag\Debug

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

  1. Manage pool web servers
  2. Manage PHP extensions
  3. 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/