📜  打印PHP调用堆栈

📅  最后修改于: 2022-05-13 01:54:11.394000             🧑  作者: Mango

打印PHP调用堆栈

给定一个PHP代码,任务是打印此PHP代码的调用堆栈。在给定的PHP代码中, child_func()函数调用 parent_func()函数,该函数进一步调用 grandparent_func()函数,从而产生调用堆栈。

方法 1:使用 debug_print_backtrace()函数打印调用堆栈。

例子:


输出:
#0  grandparent_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:12]
#1  parent_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:7]
#2  child_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:21]

方法 2:使用 debug_backtrace()函数打印调用堆栈。
例子:




输出:
array(3) {
  [0]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(12)
    ["function"]=>
    string(16) "grandparent_func"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(11) "parent_func"
    ["args"]=>
    array(0) {
    }
  }
  [2]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(21)
    ["function"]=>
    string(10) "child_func"
    ["args"]=>
    array(0) {
    }
  }
}

方法三: Exception类的成员函数getTraceAsString()返回一个调用栈。

例子:

getTraceAsString());
}
  
// Main function call
child_func();
  
?>
输出:
string(207) "#0 /home/8d8303d43667a4915d43dab7d63de26d.php(12): grandparent_func()
#1 /home/8d8303d43667a4915d43dab7d63de26d.php(7): parent_func()
#2 /home/8d8303d43667a4915d43dab7d63de26d.php(22): child_func()
#3 {main}"