Отслеживание каждого вызова функции в PHP

Я пытаюсь создать журнал трассировки в моем приложении PHP. Включение режима отладки начнет отслеживать ход выполнения функции.

Ниже то, что я ожидаю в качестве моей реализации:

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

callB(); //main.php

Я хочу отслеживать поток кода PHP.

Я знаю, что могу использовать debug_backtrace, но в этом случае мне нужно явно вызвать debug_backtrace в одной из функций.

Однако я хочу автоматически отслеживать поток кода.

Есть ли способ сделать это.

1 ответ

Обычно это делается с помощью профилировщика, такого как xdebug, который работает как расширение PHP. Но если вы должны отслеживать вызовы функций через код, написанный на самом PHP, лучшее, что вы можете сделать, это использовать register_tick_function который вызывает вашу "тиковую функцию" каждые несколько циклов собственного процессора, вместо ожидания вызова другой функции.

declare(ticks = 1);
$calls = array();
function tracer() {
    global $calls;
    $calls[] = array_shift(debug_backtrace());
}
register_tick_function('tracer');
Другие вопросы по тегам