private function buildDevelopmentExceptionHtmlContent(\Throwable $e) {
		$html = '';
		$first = true;
		do {
			if ($first) $first = false;
			else {
				$html .= '<h3>caused by: ' . htmlspecialchars(get_class($e), ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE) . '</h3>' . "\r\n";
			}
			
			$html .= '<p>' . htmlspecialchars($e->getMessage(), ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE) . '</p>' . "\r\n";
			
			if ($e instanceof \ErrorException || $e instanceof \Error) {
				$filePath = $e->getFile();
				$lineNo = $e->getLine();
				ThrowableInfoFactory::findCallPos($e, $filePath, $lineNo);
				
				if ($filePath !== null) {
					$html .= '<p>File: <strong>' . htmlspecialchars($filePath, ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE) . '</strong></p>' . "\r\n";
				}
				
				if ($lineNo !== null) {
					$html .= '<p>Line: <strong>' . htmlspecialchars($lineNo, ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE) . '</strong></p>' . "\r\n";
				}
			}	
			
			$html .= '<pre>' .  htmlspecialchars(ThrowableInfoFactory::buildStackTraceString($e), ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE) . '</pre>' . "\r\n";
		} while (null != ($e = $e->getPrevious()));
			
		return $html;
	}