- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/diag/cachetracker.php
- Класс: BitrixMainDiagCacheTracker
- Вызов: CacheTracker::add
static function add($size, $path, $baseDir, $initDir, $filename, $operation)
{
$prev = array();
$found = -1;
foreach (Helper::getBackTrace(8) as $tr)
{
$func = ($tr["class"] ?? '') . ($tr["type"] ?? '') . ($tr["function"] ?? '');
if ($found < 0 && !isset(self::$skipUntil[mb_strtolower($func)]))
{
$found = count(self::$arCacheDebug);
self::$arCacheDebug[$found] = array(
"TRACE" => array(),
"path" => $path,
"basedir" => $baseDir,
"initdir" => $initDir,
"filename" => $filename,
"cache_size" => $size,
"callee_func" => $prev["class"].$prev["type"].$prev["function"],
"operation" => $operation,
);
self::$arCacheDebug[$found]["TRACE"][] = array(
"func" => $prev["class"].$prev["type"].$prev["function"],
"args" => array(),
"file" => $prev["file"],
"line" => $prev["line"],
);
}
if ($found > -1)
{
if (count(self::$arCacheDebug[$found]["TRACE"]) < 8)
{
$args = array();
if (isset($tr["args"]) && is_array($tr["args"]))
{
foreach ($tr["args"] as $k1 => $v1)
{
if (is_array($v1))
{
foreach ($v1 as $k2 => $v2)
{
if (is_scalar($v2))
$args[$k1][$k2] = $v2;
elseif (is_object($v2))
$args[$k1][$k2] = get_class($v2);
else
$args[$k1][$k2] = gettype($v2);
}
}
else
{
if (is_scalar($v1))
$args[$k1] = $v1;
elseif (is_object($v1))
$args[$k1] = get_class($v1);
else
$args[$k1] = gettype($v1);
}
}
}
self::$arCacheDebug[$found]["TRACE"][] = array(
"func" => $func,
"args" => $args,
"file" => $tr["file"] ?? '',
"line" => $tr["line"] ?? '',
);
}
else
{
break;
}
}
$prev = $tr;
}
}