有没有办法像xdebug跟踪那样捕获方法/函数调用并用php返回事件?
我尝试使用register_tick_function,但是我不太确定这是个好方法。
我也尝试做自己的php扩展(使用Zephir),但仍然是同样的问题。
顺便说一句,我不想使用xdebug扩展名。最好的方法是什么?
答案 0 :(得分:2)
方法是编写一个与zend_execute和zend_execute_internal挂钩的PHP扩展。
请参阅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
现在在模块初始化中,我们可以保留旧指针的引用,并通过我们自己的函数覆盖Zend引擎使用的指针。
https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L164-L200
这些行是钩子的新实现。他们叫原始的。
Xdebug的执行方式与此类似,但是代码却复杂得多,因为它具有与功能周期相关的许多不同功能。