Coroutine::getTrace
(PHP 8.6+, True Async 1.0)
public Coroutine::getTrace(
int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT,
int $limit = 0
): ?array
일시 중단된 코루틴의 호출 스택(백트레이스)을 반환합니다. 코루틴이 일시 중단 상태가 아닌 경우(아직 시작되지 않음, 현재 실행 중, 또는 완료됨) null을 반환합니다.
매개변수
- options
debug_backtrace()와 유사한 옵션의 비트마스크:DEBUG_BACKTRACE_PROVIDE_OBJECT– 트레이스에$this포함DEBUG_BACKTRACE_IGNORE_ARGS– 함수 인수 미포함
- limit
- 최대 스택 프레임 수.
0– 제한 없음.
반환값
?array – 스택 프레임의 배열 또는 코루틴이 일시 중단 상태가 아닌 경우 null.
예제
예제 #1 일시 중단된 코루틴의 스택 가져오기
<?php
use function Async\spawn;
use function Async\suspend;
function innerFunction() {
suspend();
}
function outerFunction() {
innerFunction();
}
$coroutine = spawn(function() {
outerFunction();
});
suspend(); // 코루틴이 시작되고 일시 중단되도록 양보
$trace = $coroutine->getTrace();
if ($trace !== null) {
foreach ($trace as $frame) {
echo ($frame['file'] ?? '?') . ':' . ($frame['line'] ?? '?');
echo ' ' . ($frame['function'] ?? '') . "\n";
}
}
예제 #2 완료된 코루틴의 트레이스 – null
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(fn() => "test");
// 시작 전 -- null
var_dump($coroutine->getTrace()); // NULL
await($coroutine);
// 완료 후 -- null
var_dump($coroutine->getTrace()); // NULL
같이 보기
- Coroutine::isSuspended – 일시 중단 확인
- Coroutine::getSuspendLocation – 일시 중단 위치
- Coroutine::getSpawnLocation – 생성 위치