× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Coroutine::getBackTrace

获取协程函数调用栈。

function Coroutine::getBackTrace(int $cid=0, int $options=DEBUG_BACKTRACE_PROVIDE_OBJECT, int $limit=0) : array;

需要4.1.0或更高版本

参数

  • $cid 协程的ID,默认为当前协程
  • $options 设置选项
    • DEBUG_BACKTRACE_PROVIDE_OBJECT: 是否填充object的索引
    • DEBUG_BACKTRACE_IGNORE_ARGS: 是否忽略args的索引,包括所有的 function/method 的参数,能够节省内存开销
  • $limit 限制返回堆栈帧的数量

返回值

  • 指定的协程不存在,将返回false
  • 成功返回数组,格式与 debug_backtrace 函数返回值相同

使用实例

function test1() {
    test2();
}

function test2() {
    while(true) {
        co::sleep(10);
        echo __FUNCTION__." \n";
    }
}

$cid = go(function () {
    test1();
});

go(function () use ($cid) {
    while(true) {
        echo "BackTrace[$cid]:\n-----------------------------------------------\n";
        //返回数组,需要自行格式化输出
        var_dump(co::getBackTrace($cid))."\n";
        co::sleep(3);
    }
});