отладка — отслеживание вызовов каждой функции в переполнении стека

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

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

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

callB(); //main.php

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

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

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

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

0

Решение

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]