/** * @param \Exception|\Throwable $exception */ private function renderException($exception) { if ($exception instanceof ErrorException) { fwrite(STDERR, sprintf("ErrorException: %s \n", $exception->getErrorName())); } else { fwrite(STDERR, sprintf("Exception: %s (Code: %d)\n", get_class($exception), $exception->getCode())); } fwrite(STDERR, sprintf("Location: %s (Line %d)\n\n", $exception->getFile(), $exception->getLine())); fwrite(STDERR, $exception->getMessage() . "\n\n"); if ($exception instanceof HasFileInfoException) { fwrite(STDERR, "\nException occured while processing file: " . $exception->getFile() . "\n\n"); } $trace = $exception->getTrace(); array_shift($trace); if (count($trace) == 0) { fwrite(STDERR, 'No stacktrace available'); } foreach ($trace as $pos => $entry) { fwrite(STDERR, sprintf('#%1$d %2$s(%3$d): %4$s%5$s%6$s()' . "\n", $pos, isset($entry['file']) ? $entry['file'] : 'unknown', isset($entry['line']) ? $entry['line'] : '0', isset($entry['class']) ? $entry['class'] : '', isset($entry['type']) ? $entry['type'] : '', isset($entry['function']) ? $entry['function'] : '')); } $nested = $exception->getPrevious(); if ($nested !== NULL) { fwrite(STDERR, "\n\n"); $this->renderException($nested); } }