From 66fc1026b224159b5df67c3e2ef8761d8de4d477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Thu, 3 Sep 2020 18:51:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.php | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/function.php b/function.php index ef6baea4..2de321d8 100644 --- a/function.php +++ b/function.php @@ -299,3 +299,53 @@ if (!function_exists('merge')) { } } + + + +if (!function_exists('jTraceEx')) { + + /** + * @param $e + * @param null $seen + * @return string + */ + function jTraceEx($e, $seen = null) + { + $starter = $seen ? 'Caused by: ' : ''; + $result = array(); + if (!$seen) $seen = array(); + $trace = $e->getTrace(); + $prev = $e->getPrevious(); + $result[] = sprintf('%s%s: %s', $starter, get_class($e), $e->getMessage()); + $file = $e->getFile(); + $line = $e->getLine(); + while (true) { + $current = "$file:$line"; + if (is_array($seen) && in_array($current, $seen)) { + $result[] = sprintf(' ... %d more', count($trace) + 1); + break; + } + $result[] = sprintf(' at %s%s%s(%s%s%s)', + count($trace) && array_key_exists('class', $trace[0]) ? str_replace('\\', '.', $trace[0]['class']) : '', + count($trace) && array_key_exists('class', $trace[0]) && array_key_exists('function', $trace[0]) ? '.' : '', + count($trace) && array_key_exists('function', $trace[0]) ? str_replace('\\', '.', $trace[0]['function']) : '(main)', + $line === null ? $file : basename($file), + $line === null ? '' : ':', + $line === null ? '' : $line); + if (is_array($seen)) + $seen[] = "$file:$line"; + if (!count($trace)) + break; + $file = array_key_exists('file', $trace[0]) ? $trace[0]['file'] : 'Unknown Source'; + $line = array_key_exists('file', $trace[0]) && array_key_exists('line', $trace[0]) && $trace[0]['line'] ? $trace[0]['line'] : null; + array_shift($trace); + } + $result = join("\n", $result); + if ($prev) + $result .= "\n" . jTraceEx($prev, $seen); + + return $result; + } + + +}