【问题标题】:PHP on method/function call eventPHP 上的方法/函数调用事件
【发布时间】:2018-07-20 11:33:15
【问题描述】:

有没有办法像 xdebug 跟踪一样用 php 捕获方法/函数调用并返回事件?

我尝试使用 register_tick_function,但我不太确定这是不是好方法。

我也尝试做自己的 php 扩展(使用 Zephir),但仍然是同样的问题。

顺便说一句,我不想​​使用 xdebug 扩展。最好的方法是什么?

【问题讨论】:

  • 感谢您让我注意到 Zephir。

标签: php php-extension


【解决方案1】:

方法是编写一个挂钩到 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

现在在模块 init 中,我们可以保留旧指针的引用,并用我们自己的函数覆盖 Zend 引擎使用的那个。

https://github.com/tideways/php-xhprof-extension/blob/master/tideways_xhprof.c#L164-L200

这些行是钩子的新实现。他们称之为原始人。

Xdebug 以类似的方式执行此操作,但代码要复杂得多,因为它有许多不同的功能挂钩到函数循环中。

【讨论】:

  • 我会尝试将我自己的 c 函数添加到我的 zephir 扩展中,看起来这是可能的。谢谢
  • 我很确定我提出的建议对于 zephir 来说是不可能的。您需要编写一个 C 扩展。
猜你喜欢
  • 2016-11-08
  • 2013-03-08
  • 1970-01-01
  • 2018-08-13
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多