如何获得PHP完整调用跟踪,而不仅仅是堆栈调用跟踪


How do I get a PHP full call trace, not only stack call trace?

是以下PHP代码:

<?php
function a() {
    b();
}
function b() {
    c();
}
function c(){
    debug_print_backtrace();
}
function d() {
    echo "I am a function d(). Where on the list is my call?'n";
}
d();
a();
?>
上面的示例将输出类似于:
I am a function d(). Where on the list is my call?
#0  c() called at [D:'tests.php:18]
#1  b() called at [D:'tests.php:14]
#2  a() called at [D:'tests.php:31]

是否有一种方法来获得完整的调用跟踪,而不仅仅是调用堆栈跟踪?

是的,有,但这只能通过在执行期间监视整个脚本来完成。它被称为"剖析"。

XDebug是允许这样做的工具之一。详见http://www.xdebug.org/docs/profiler。请注意,XDebug将它的分析数据写入一个目录,因此在执行期间PHP内部无法直接访问这些数据(这也会破坏分析数据,因为这些调用也将被监视)。

还有XHProf http://php.net/manual/en/book.xhprof.php,它允许在PHP中打开和关闭,并提供HTML GUI。这个例子看起来相当简单。