Esempio n. 1
0
 public static function _init()
 {
     self::$time = microtime(TRUE);
     self::$consoleMode = PHP_SAPI === 'cli';
     self::$productionMode = self::DETECT;
     if (self::$consoleMode) {
         self::$source = empty($_SERVER['argv']) ? 'cli' : 'cli: ' . $_SERVER['argv'][0];
     } else {
         self::$firebugDetected = isset($_SERVER['HTTP_X_FIRELOGGER']);
         self::$ajaxDetected = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
         if (isset($_SERVER['REQUEST_URI'])) {
             self::$source = (isset($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'off') ? 'https://' : 'http://') . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')) . $_SERVER['REQUEST_URI'];
         }
     }
     $tab = array(__CLASS__, 'renderTab');
     $panel = array(__CLASS__, 'renderPanel');
     self::addPanel(new DebugPanel('time', $tab, $panel));
     self::addPanel(new DebugPanel('memory', $tab, $panel));
     self::addPanel(new DebugPanel('errors', $tab, $panel));
     self::addPanel(new DebugPanel('dumps', $tab, $panel));
 }
Esempio n. 2
0
echo htmlspecialchars((string) $message, ENT_QUOTES, Kohana::$charset, true);
?>
</span></h1>
	<div id="<?php 
echo $error_id;
?>
" class="content">
		<p><span class="file"><?php 
echo Debug::path($file);
?>
 [ <?php 
echo $line;
?>
 ]</span></p>
		<?php 
echo Debug::source($file, $line);
?>
		<ol class="trace">
		<?php 
foreach (Debug::trace($trace) as $i => $step) {
    ?>
			<li>
				<p>
					<span class="file">
						<?php 
    if ($step['file']) {
        $source_id = $error_id . 'source' . $i;
        ?>
							<a href="#<?php 
        echo $source_id;
        ?>
Esempio n. 3
0
 /**
  * Returns an array of HTML strings that represent each step in the backtrace.
  *
  *     // Displays the entire current backtrace
  *     echo implode('<br/>', Debug::trace());
  *
  * @param array $trace
  * @return array
  */
 public static function trace(array $trace = null)
 {
     if ($trace === null) {
         // Start a new trace
         $trace = debug_backtrace();
     }
     // Non-standard function calls
     $statements = array('include', 'include_once', 'require', 'require_once');
     $output = array();
     foreach ($trace as $step) {
         if (!isset($step['function'])) {
             // Invalid trace step
             continue;
         }
         if (isset($step['file']) and isset($step['line'])) {
             // Include the source of this step
             $source = Debug::source($step['file'], $step['line']);
         }
         if (isset($step['file'])) {
             $file = $step['file'];
             if (isset($step['line'])) {
                 $line = $step['line'];
             }
         }
         // function()
         $function = $step['function'];
         if (in_array($step['function'], $statements)) {
             if (empty($step['args'])) {
                 // No arguments
                 $args = array();
             } else {
                 // Sanitize the file path
                 $args = array($step['args'][0]);
             }
         } elseif (isset($step['args'])) {
             if (!function_exists($step['function']) or strpos($step['function'], '{closure}') !== false) {
                 // Introspection on closures or language constructs in a stack trace is impossible
                 $params = null;
             } else {
                 if (isset($step['class'])) {
                     if (method_exists($step['class'], $step['function'])) {
                         $reflection = new ReflectionMethod($step['class'], $step['function']);
                     } else {
                         $reflection = new ReflectionMethod($step['class'], '__call');
                     }
                 } else {
                     $reflection = new ReflectionFunction($step['function']);
                 }
                 // Get the function parameters
                 $params = $reflection->getParameters();
             }
             $args = array();
             foreach ($step['args'] as $i => $arg) {
                 if (isset($params[$i])) {
                     // Assign the argument by the parameter name
                     $args[$params[$i]->name] = $arg;
                 } else {
                     // Assign the argument by number
                     $args[$i] = $arg;
                 }
             }
         }
         if (isset($step['class'])) {
             // Class->method() or Class::method()
             $function = $step['class'] . $step['type'] . $step['function'];
         }
         $output[] = array('function' => $function, 'args' => isset($args) ? $args : null, 'file' => isset($file) ? $file : null, 'line' => isset($line) ? $line : null, 'source' => isset($source) ? $source : null);
         unset($function, $args, $file, $line, $source);
     }
     return $output;
 }
Esempio n. 4
0
 public static function trace(array $trace = NULL)
 {
     if ($trace === NULL) {
         // Start a new trace
         $trace = debug_backtrace();
     }
     // Non-standard function calls
     $statements = array("include", "include_once", "require", "require_once");
     $output = array();
     foreach ($trace as $step) {
         if (!isset($step["function"])) {
             // Invalid trace step
             continue;
         }
         if (isset($step["file"]) and isset($step["line"])) {
             // Include the source of this step
             $source = Debug::source($step["file"], $step["line"]);
         }
         if (isset($step["file"])) {
             $file = $step["file"];
             if (isset($step["line"])) {
                 $line = $step["line"];
             }
         }
         // function()
         $function = $step["function"];
         if (in_array($step["function"], $statements)) {
             if (empty($step["args"])) {
                 // No arguments
                 $args = array();
             } else {
                 // Sanitize the file path
                 $args = array($step["args"][0]);
             }
         } elseif (isset($step["args"])) {
             if (!function_exists($step["function"]) or strpos($step["function"], "{closure}") !== FALSE) {
                 // Introspection on closures or language constructs in a stack trace is impossible
                 $params = NULL;
             } else {
                 if (isset($step["class"])) {
                     if (method_exists($step["class"], $step["function"])) {
                         $reflection = new ReflectionMethod($step["class"], $step["function"]);
                     } else {
                         $reflection = new ReflectionMethod($step["class"], "__call");
                     }
                 } else {
                     $reflection = new ReflectionFunction($step["function"]);
                 }
                 // Get the function parameters
                 $params = $reflection->getParameters();
             }
             $args = array();
             foreach ($step["args"] as $i => $arg) {
                 if (isset($params[$i])) {
                     // Assign the argument by the parameter name
                     $args[$params[$i]->name] = $arg;
                 } else {
                     // Assign the argument by number
                     $args[$i] = $arg;
                 }
             }
         }
         if (isset($step["class"])) {
             // Class->method() or Class::method()
             $function = $step["class"] . $step["type"] . $step["function"];
         }
         $output[] = array("function" => $function, "args" => isset($args) ? $args : NULL, "file" => isset($file) ? $file : NULL, "line" => isset($line) ? $line : NULL, "source" => isset($source) ? $source : NULL);
         unset($function, $args, $file, $line, $source);
     }
     return $output;
 }
 */
$cols = exec('tput cols', $status, $result);
if ($result !== 0) {
    // Probably running under cron or otherwise detached from a terminal
    $cols = 100;
}
// Render the exception message in a header block
$main_message = $class . ' [' . $code . ']: ' . $message;
$main_message = explode(\PHP_EOL, $main_message);
$main_message = array_map(function ($val) use($cols) {
    return str_pad($val, $cols);
}, $main_message);
echo Minion_CLI::color(implode(\PHP_EOL, $main_message), 'white', 'red') . \PHP_EOL;
echo Minion_CLI::color(str_pad(Debug::path($file) . '[' . $line . ']', $cols), 'red') . \PHP_EOL;
// Render the source that failed, highlighting the failing line
$source = html_entity_decode(strip_tags(Debug::source($file, $line)));
$source = preg_replace_callback("/^" . $line . ".+?\$/m", function ($err_line) {
    return Minion_CLI::color($err_line[0], 'white', 'red');
}, $source);
echo $source . \PHP_EOL;
// Render the trace
echo Minion_CLI::color(str_pad("TRACE (last 5 entries)", $cols), 'black', 'yellow') . \PHP_EOL;
$level = -1;
foreach (Debug::trace($trace) as $i => $step) {
    $level++;
    $file = $step['file'] ? Debug::path($step['file']) . '[' . $step['line'] . ']' : '{PHP internal call}';
    echo Minion_CLI::color(str_pad("#" . $level, 3), 'black', 'yellow') . " " . Minion_CLI::color($step['function'], 'yellow') . " - " . Minion_CLI::color($file, 'cyan') . \PHP_EOL;
    if (!$step['args']) {
        continue;
    }
    $max_name_len = max(array_map(function ($key) {