在PHP中跟踪每个函数调用


Tracing each function calls in PHP

我正试图在我的PHP应用程序中创建一个跟踪日志。打开调试模式将开始跟踪函数的流。

以下是我对实现的期望:

function callA(x) { ... }  //XYZ.php
function callB() { ... callA(1) ... }  //ABC.php
callB(); //main.php

我想跟踪PHP代码的流程。

我知道我可以使用debug_backtrace,但在这种情况下,我需要在其中一个函数中显式调用debug_backtrace

然而,我想要的是自动跟踪代码流。

有什么方法可以做到吗?

通常,这将通过像xdebug这样作为PHP扩展运行的探查器来完成。但是,如果必须通过用PHP本身编写的代码来跟踪函数调用,那么最好使用register_tick_function,它每隔几个原生CPU周期就会调用一次"tick函数",而不是等待另一个函数调用。

declare(ticks = 1);
$calls = array();
function tracer() {
    global $calls;
    $calls[] = array_shift(debug_backtrace());
}
register_tick_function('tracer');