Coroutine::getTrace

(PHP 8.6+, True Async 1.0)

public Coroutine::getTrace(
    int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT,
    int $limit = 0
): ?array

Gibt den Aufrufstapel (Backtrace) einer unterbrochenen Coroutine zurueck. Wenn die Coroutine nicht unterbrochen ist (noch nicht gestartet, gerade ausgefuehrt oder abgeschlossen), wird null zurueckgegeben.

Parameter

options
Eine Bitmaske von Optionen, aehnlich wie bei debug_backtrace():
  • DEBUG_BACKTRACE_PROVIDE_OBJECT$this in den Trace einbeziehen
  • DEBUG_BACKTRACE_IGNORE_ARGS – Funktionsargumente nicht einbeziehen
limit
Maximale Anzahl von Stapelrahmen. 0 – keine Begrenzung.

Rueckgabewert

?array – ein Array von Stapelrahmen oder null, wenn die Coroutine nicht unterbrochen ist.

Beispiele

Beispiel #1 Stapel einer unterbrochenen Coroutine abrufen

<?php

use function Async\spawn;
use function Async\suspend;

function innerFunction() {
    suspend();
}

function outerFunction() {
    innerFunction();
}

$coroutine = spawn(function() {
    outerFunction();
});

suspend(); // Coroutine starten und unterbrechen lassen

$trace = $coroutine->getTrace();

if ($trace !== null) {
    foreach ($trace as $frame) {
        echo ($frame['file'] ?? '?') . ':' . ($frame['line'] ?? '?');
        echo ' ' . ($frame['function'] ?? '') . "\n";
    }
}

Beispiel #2 Trace fuer eine abgeschlossene Coroutine – null

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(fn() => "test");

// Vor dem Start -- null
var_dump($coroutine->getTrace()); // NULL

await($coroutine);

// Nach dem Abschluss -- null
var_dump($coroutine->getTrace()); // NULL

Siehe auch