PHP 在 method/function 调用事件
PHP on method/function call event
有没有办法像 xdebug 跟踪那样用 php 捕获 method/function 调用和 return 事件?
我尝试使用 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 以类似的方式执行此操作,但代码要复杂得多,因为它有许多不同的功能挂接到函数循环中。
有没有办法像 xdebug 跟踪那样用 php 捕获 method/function 调用和 return 事件?
我尝试使用 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 以类似的方式执行此操作,但代码要复杂得多,因为它有许多不同的功能挂接到函数循环中。