Coroutine::getTrace
(PHP 8.6+, True Async 1.0)
php
public Coroutine::getTrace(
int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT,
int $limit = 0
): ?arrayRetourne la pile d'appels (backtrace) d'une coroutine suspendue. Si la coroutine n'est pas suspendue (pas encore démarrée, en cours d'exécution ou terminée), retourne null.
Paramètres
options : Un masque binaire d'options, similaire à debug_backtrace() :
DEBUG_BACKTRACE_PROVIDE_OBJECT-- inclure$thisdans la traceDEBUG_BACKTRACE_IGNORE_ARGS-- ne pas inclure les arguments des fonctions
limit : Nombre maximum de cadres de pile. 0 -- pas de limite.
Valeur de retour
?array -- un tableau de cadres de pile ou null si la coroutine n'est pas suspendue.
Exemples
Exemple #1 Obtenir la pile d'une coroutine suspendue
php
<?php
use function Async\spawn;
use function Async\suspend;
function innerFunction() {
suspend();
}
function outerFunction() {
innerFunction();
}
$coroutine = spawn(function() {
outerFunction();
});
suspend(); // laisser la coroutine démarrer et se suspendre
$trace = $coroutine->getTrace();
if ($trace !== null) {
foreach ($trace as $frame) {
echo ($frame['file'] ?? '?') . ':' . ($frame['line'] ?? '?');
echo ' ' . ($frame['function'] ?? '') . "\n";
}
}Exemple #2 Trace d'une coroutine terminée -- null
php
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => "test");
// Avant le démarrage -- null
var_dump($coroutine->getTrace()); // NULL
await($coroutine);
// Après la terminaison -- null
var_dump($coroutine->getTrace()); // NULLVoir aussi
- Coroutine::isSuspended -- Vérifier la suspension
- Coroutine::getSuspendLocation -- Emplacement de suspension
- Coroutine::getSpawnLocation -- Emplacement de création