Coroutine::getTrace
(PHP 8.6+, True Async 1.0)
php
public Coroutine::getTrace(
int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT,
int $limit = 0
): ?arrayDevuelve la pila de llamadas (backtrace) de una coroutine suspendida. Si la coroutine no está suspendida (no iniciada, ejecutándose actualmente, o completada), devuelve null.
Parámetros
options : Una máscara de bits de opciones, similar a debug_backtrace():
DEBUG_BACKTRACE_PROVIDE_OBJECT-- incluir$thisen la trazaDEBUG_BACKTRACE_IGNORE_ARGS-- no incluir argumentos de función
limit : Número máximo de marcos de pila. 0 -- sin límite.
Valor de retorno
?array -- un array de marcos de pila o null si la coroutine no está suspendida.
Ejemplos
Ejemplo #1 Obtener la pila de una coroutine suspendida
php
<?php
use function Async\spawn;
use function Async\suspend;
function innerFunction() {
suspend();
}
function outerFunction() {
innerFunction();
}
$coroutine = spawn(function() {
outerFunction();
});
suspend(); // dejar que la coroutine inicie y se suspenda
$trace = $coroutine->getTrace();
if ($trace !== null) {
foreach ($trace as $frame) {
echo ($frame['file'] ?? '?') . ':' . ($frame['line'] ?? '?');
echo ' ' . ($frame['function'] ?? '') . "\n";
}
}Ejemplo #2 Traza de una coroutine completada -- null
php
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => "test");
// Antes de iniciar -- null
var_dump($coroutine->getTrace()); // NULL
await($coroutine);
// Después de completar -- null
var_dump($coroutine->getTrace()); // NULLVer también
- Coroutine::isSuspended -- Verificar suspensión
- Coroutine::getSuspendLocation -- Ubicación de suspensión
- Coroutine::getSpawnLocation -- Ubicación de creación