Coroutine::getBackTrace

获取协程函数调用栈。

  1. 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 函数返回值相同

使用实例

  1. function test1() {
  2. test2();
  3. }
  4. function test2() {
  5. while(true) {
  6. co::sleep(10);
  7. echo __FUNCTION__." \n";
  8. }
  9. }
  10. $cid = go(function () {
  11. test1();
  12. });
  13. go(function () use ($cid) {
  14. while(true) {
  15. echo "BackTrace[$cid]:\n-----------------------------------------------\n";
  16. //返回数组,需要自行格式化输出
  17. var_dump(co::getBackTrace($cid))."\n";
  18. co::sleep(3);
  19. }
  20. });