1: <?php
2:
3: namespace PHPixie\Debug;
4:
5: class Tracer
6: {
7: protected $builder;
8:
9: public function __construct($builder)
10: {
11: $this->builder = $builder;
12: }
13:
14: public function exceptionTrace($exception, $limit = null)
15: {
16: $first = $this->builder->traceElement(
17: $exception->getFile(),
18: $exception->getLine()
19: );
20:
21: $trace = array_slice($exception->getTrace(), 0, $limit);
22: $elements = $this->elementsFromTrace($trace);
23:
24: array_unshift($elements, $first);
25: return $this->builder->trace($elements);
26: }
27:
28:
29: public function backtrace($limit = null, $offset = 0)
30: {
31: $trace = $this->debugBacktrace();
32: $trace = array_slice($trace, $offset+1, $limit);
33:
34: $elements = $this->elementsFromTrace($trace);
35: return $this->builder->trace($elements);
36: }
37:
38: protected function elementsFromTrace($trace)
39: {
40: $elements = array();
41: foreach($trace as $element) {
42:
43: $class = $this->get($element, 'class');
44: if($class === 'PHPixie\Debug\Handlers') {
45: continue;
46: }
47:
48: $elements[]= $this->builder->traceElement(
49: $this->get($element, 'file'),
50: $this->get($element, 'line'),
51: $this->get($element, 'function'),
52: $this->get($element, 'args'),
53: $class,
54: $this->get($element, 'object'),
55: $this->get($element, 'type')
56: );
57: }
58:
59: return $elements;
60: }
61:
62: protected function debugBacktrace()
63: {
64: return debug_backtrace();
65: }
66:
67: protected function get($array, $key)
68: {
69: if(array_key_exists($key, $array)) {
70: return $array[$key];
71: }
72:
73: return null;
74: }
75: }