You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
<?php |
|
|
|
/** @package verysimple::Util */ |
|
|
|
/** |
|
* Formatter for formatting Exceptions and stack traces |
|
* |
|
* @package verysimple::String |
|
* @author Jason Hinkle |
|
* @copyright 1997-2008 VerySimple, Inc. |
|
* @license http://www.gnu.org/licenses/lgpl.html LGPL |
|
* @version 1.0 |
|
*/ |
|
class ExceptionFormatter |
|
{ |
|
/** |
|
* This is a utility function for tracing errors. |
|
* It will return a string that |
|
* displys the current execution stack |
|
* |
|
* @param string $msg |
|
* a debugging message to include |
|
* @param int $depth |
|
* how far to go back in the stack (default = unlimited) |
|
* @param string $join |
|
* the delimiter between lines |
|
* @param bool $show_lines |
|
* true to include line numbers |
|
*/ |
|
static function GetTraceAsString($msg = "DEBUG", $depth = 0, $join = " :: ", $show_lines = true) |
|
{ |
|
$error = new Exception($msg); |
|
return self::FormatTrace($error->getTrace(), $depth, $join, $show_lines); |
|
} |
|
|
|
/** |
|
* Formats the debug_backtrace array into a printable string. |
|
* |
|
* You can create a debug traceback using $exception->getTrace() |
|
* or using the php debug_backtrace() function |
|
* |
|
* @access public |
|
* @param |
|
* array debug_backtrace. For example: debug_backtrace() -or- $exception->getTrace() |
|
* @param int $depth |
|
* how far to go back in the stack (default = unlimited) |
|
* @param string $join |
|
* the delimiter between lines |
|
* @param bool $show_lines |
|
* true to include line numbers |
|
*/ |
|
static function FormatTrace($tb, $depth = 0, $join = " :: ", $show_lines = true) |
|
{ |
|
$msg = ""; |
|
$delim = ""; |
|
|
|
$calling_function = ""; |
|
$calling_line = "[?]"; |
|
$levels = count($tb); |
|
|
|
if ($depth == 0) { |
|
$depth = $levels; |
|
} |
|
|
|
for ($x = $levels; $x > 0; $x--) { |
|
$stack = $tb [$x - 1]; |
|
$s_file = isset($stack ['file']) ? basename($stack ['file']) : "[?]"; |
|
$s_line = isset($stack ['line']) ? $stack ['line'] : "[?]"; |
|
$s_function = isset($stack ['function']) ? $stack ['function'] : ""; |
|
$s_class = isset($stack ['class']) ? $stack ['class'] : ""; |
|
$s_type = isset($stack ['type']) ? $stack ['type'] : ""; |
|
|
|
if ($depth >= $x) { |
|
$msg .= $delim . "$calling_function" . ($show_lines ? " ($s_file Line $s_line)" : ""); |
|
$delim = $join; |
|
} |
|
|
|
$calling_function = $s_class . $s_type . $s_function; |
|
} |
|
|
|
return $msg; |
|
} |
|
}
|
|
|