打印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}"