public function throwabeExtensions() { $t = new Throwable('Test'); $this->assertNotEquals([], $t->getStackTrace()); $t->clearStackTrace(); $this->assertEquals([], $t->getStackTrace()); }
/** * Fills in stack trace information. * * @param self $from * @return self this */ public function fillInStackTrace($from = null) { static $except = ['call_user_func_array' => 1, 'call_user_func' => 1]; // Error messages foreach (\xp::$errors as $file => $list) { $this->addStackTraceFor($file, null, null, null, [], $list); } foreach ($from ? $from->getTrace() : $this->getTrace() as $i => $trace) { if (!isset($trace['function']) || isset($except[$trace['function']]) || isset($trace['object']) && $trace['object'] instanceof self) { continue; } // Not all of these are always set: debug_backtrace() should // initialize these - at least - to NULL, IMO => Workaround. $this->addStackTraceFor($trace['file'] ?? null, $trace['class'] ?? null, $trace['function'] ?? null, $trace['line'] ?? null, $trace['args'] ?? null, [['' => 1]]); } return $this; }
/** * Handle exception from scriptlet * * @param lang.Throwable t * @param int status * @param bool trace whether to show stacktrace * @return scriptlet.HttpScriptletResponse */ protected function fail(\lang\Throwable $t, $status, $trace) { $package = create(new \lang\XPClass(__CLASS__))->getPackage(); $errorPage = $package->providesResource('error' . $status . '.html') ? $package->getResource('error' . $status . '.html') : $package->getResource('error500.html'); $response = new \scriptlet\HttpScriptletResponse(); $response->setStatus($status); $response->setContent(str_replace('<xp:value-of select="reason"/>', $trace ? $t->toString() : $t->getMessage(), $errorPage)); return $response; }
/** * Invoke a block, wrap PHP5 and PHP7 native base exceptions in lang.Error * * @param function(?): void $block * @param var $arg * @return void */ private function invoke($block, $arg) { try { $block($arg); } catch (Throwable $e) { throw $e; } catch (\Exception $e) { throw Throwable::wrap($e); } catch (\Throwable $e) { throw Throwable::wrap($e); } }
public function printStackTrace() { $out = new MemoryOutputStream(); $e = new Throwable('Test'); $e->printStackTrace(Streams::writeableFd($out)); $this->assertEquals($e->toString(), $out->getBytes()); }
/** * Called when compilation fails * * @param xp.compiler.io.Source src * @param lang.Throwable reason */ public function compilationFailed(Source $src, \lang\Throwable $reason) { $this->writer->writeLine($src, ': ', $reason->compoundMessage()); $reason->printStackTrace(); }
/** * Called when compilation fails * * @param xp.compiler.io.Source src * @param lang.Throwable reason */ public function compilationFailed(Source $src, \lang\Throwable $reason) { $this->writer->write('F'); $this->failed++; $this->messages[$src->getURI()] = $reason->compoundMessage(); }
/** * Handle exception from scriptlet * * @param scriptlet.Response $response * @param lang.Throwable $t * @param int $status * @param bool $trace whether to show stacktrace * @return scriptlet.HttpScriptletResponse */ protected function error($response, \lang\Throwable $t, $status, $trace) { $package = $this->getClass()->getPackage(); $errorPage = $package->getResource($package->providesResource('error' . $status . '.html') ? 'error' . $status . '.html' : 'error500.html'); $response->setProcessed(false); $response->setStatus($status); $response->setContent(str_replace('<xp:value-of select="reason"/>', $trace ? $t->toString() : $t->getMessage(), $errorPage)); }