• Модуль: 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;
	}
}