我正试图在我的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');