]> git.mxchange.org Git - friendica.git/commitdiff
Improve the way the callstack is built
authorMichael <heluecht@pirati.ca>
Tue, 17 Oct 2017 20:51:46 +0000 (20:51 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 17 Oct 2017 20:51:46 +0000 (20:51 +0000)
src/Core/System.php

index 36870af6d2cc2b7437e80f50ee4ab0df498f2581..a2c6f6509cbfcdb32c8afa3e0e50c22067039035 100644 (file)
@@ -57,22 +57,39 @@ class System {
         * @return string
         */
        public static function callstack($depth = 4) {
-               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $depth + 2);
+               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
 
                // We remove the first two items from the list since they contain data that we don't need.
                array_shift($trace);
                array_shift($trace);
 
                $callstack = array();
-               foreach ($trace AS $func) {
+               $counter = 0;
+               $previous = array('class' => '', 'function' => '');
+
+               // The ignore list contains all functions that are only wrapper functions
+               $ignore = array('get_config', 'get_pconfig', 'set_config', 'set_pconfig', 'fetch_url', 'probe_url');
+
+               while ($func = array_pop($trace)) {
                        if (!empty($func['class'])) {
-                               $callstack[] = $func['class'].'::'.$func['function'];
-                       } else {
+                               // Don't show multiple calls from the same function (mostly used for "dba" class)
+                               if (($previous['class'] != $func['class']) && ($previous['function'] != 'q')) {
+                                       $classparts = explode("\\", $func['class']);
+                                       $callstack[] = array_pop($classparts).'::'.$func['function'];
+                                       $previous = $func;
+                               }
+                       } elseif (!in_array($func['function'], $ignore)) {
                                $callstack[] = $func['function'];
+                               $previous = $func;
                        }
                }
 
-               return implode(', ', $callstack);
+               $callstack2 = array();
+               while ((count($callstack2) < $depth) && (count($callstack) > 0)) {
+                       $callstack2[] = array_pop($callstack);
+               }
+
+               return implode(', ', $callstack2);
        }
 
        /// @todo Move the following functions from boot.php