debug_print_backtrace() 是 PHP 5 內置函數,可直接輸出當前代碼執行到該處的完整調用堆棧,清晰展示「從哪裡來、調用了誰、在哪行」,是排查複雜調用鏈、異常流轉的神器。PEAR 的 PHP_Compat 包提供了低版本兼容實現。
<?php
class A {
public function say($msg) {
echo "msg: $msg\n";
echo "<pre>";
debug_print_backtrace(); // 直接輸出堆棧
}
}
class B {
public function say($msg) {
$a = new A();
$a->say($msg);
}
}
class C {
public function __construct($msg) {
$b = new B();
$b->say($msg);
}
}
$c = new C("test");
msg: test
#0 A->say(test) called at [/var/www/test/test0723.php:12]
#1 B->say(test) called at [/var/www/test/test0723.php:19]
#2 C->__construct(test) called at [/var/www/test/test0723.php:23]
<?php
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); // 忽略參數節省內存
foreach ($trace as $frame) {
echo "文件: {$frame['file']}, 行: {$frame['line']}, 函數: {$frame['function']}\n";
}
// 可自定義格式、過濾、記錄日志、發送監控系統等
debug_backtrace() 限制層數