-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
Suggestion, for utility functions - I put them in Trace.php. Almost-dropin replacements for PHP debug_backtrace() and debug_print_backtrace(), useful for retrieving backtrace without having to throw a fatal exception. Happy to create as pull request, but quite possible I missed something vital in writing these.
/**
* Replacement for debug_print_backtrace() PHP function. Returns the current stack as a string
*
* Call as `yield Trace::debug_print_backtrace();`
*/
public static function debug_print_backtrace() : \Generator
{
/** @var Trace $trace */
$trace = \class_exists(\Recoil\Dev\Instrumentation\Trace::class) ? yield \Recoil\Dev\Instrumentation\Trace::install() : null;
$e = new Exception();
$trace->updateStackTrace($e);
return $e->getTraceAsString();
}
/**
* Replacement for debug_backtrace() PHP function. Returns the current stack as an array
*
* Call as `$backtrace = yield Trace::debug_backtrace();`
*/
public static function debug_backtrace() : \Generator
{
/** @var Trace $trace */
$trace = \class_exists(\Recoil\Dev\Instrumentation\Trace::class) ? yield \Recoil\Dev\Instrumentation\Trace::install() : null;
$e = new Exception();
$trace->updateStackTrace($e);
return $e->getTrace();
}