Есть ли способ перехватить вызовы метода / функции и вернуть событие с помощью php, как трассировка xdebug?
Я пытался использовать register_tick_function, но я не уверен, что это хороший подход.
Я также попытался сделать свое собственное расширение php (используя Zephir), но все еще та же проблема.
Кстати, я не хочу использовать расширение xdebug. Каков наилучший подход?
Подход заключается в написании расширения PHP, которое подключается к zend_execute и zend_execute_internal.
Смотрите следующие связанные строки в расширении профилировщика tideways_xhprof:
https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L15-L18
Эти первые две строки объявляют глобальные переменные для хранения старых / оригинальных указателей на функции. Вторые две строки — это объявление новых функций, которые оборачивают оригинальные.
https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L67-L71
Теперь в модуле init мы можем сохранить ссылку на старые указатели и перезаписать ту, которую движок Zend использует с нашими собственными функциями.
https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L164-L200
Эти строки являются новыми реализациями хуков. Они называют оригинальные.
Xdebug делает это аналогичным образом, но код гораздо сложнее, потому что он имеет много различных функций, которые подключаются к циклу функций.
Других решений пока нет …