【发布时间】:2011-01-19 04:39:17
【问题描述】:
我很好奇一些内置函数是如何实现的,但是直接在源码中查找非常耗时,有没有工具可以自动完成?
编辑
或者有没有可以调试到实际执行的c代码的工具?
【问题讨论】:
我很好奇一些内置函数是如何实现的,但是直接在源码中查找非常耗时,有没有工具可以自动完成?
编辑
或者有没有可以调试到实际执行的c代码的工具?
【问题讨论】:
可以从 PHP 访问的大多数(全部?)函数都定义在 PHP 源代码的 ext/ 目录下。如果您有递归搜索工具,请搜索 PHP_FUNCTION - 如果您将该搜索的结果保存到文本文件中,这将是一个很好的“索引”,用于确定 PHP 内置函数的定义位置。
真正的核心内容在 ext/standard 中。
一些罕见的“函数”在 PHP 编译到的 Zend 虚拟机中直接实现为操作码,因此没有这样定义良好的 C 函数。例如,我认为 strlen 就是这样一个函数。
【讨论】:
get_class?
我相信你应该看看this。
Facebook 开发了一种将 PHP 代码转换为 C++ 的工具。
所以我想它在某种程度上也可以处理 C。
【讨论】:
关于调试执行的C代码,我想可以使用dbg之类的东西;不过,您首先必须使用 --enable-debug 模式重新编译 PHP。
更多信息,你可以看看:
我从未使用它来调试 PHP 本身,但我已经使用这两个页面生成了一些我在使用扩展时遇到的崩溃的回溯,据我记忆,它工作正常。
作为旁注:使用使用--enable-debug 编译的 PHP,您可能需要重新编译您正在使用的一些扩展并更改它们的加载方式(例如,Xdebug 就是这种情况) ;和其他一些可能根本不再工作。
【讨论】:
--enable-debug 构建 PHP 会让你知道更多关于出了什么问题,什么时候发生。 ;;;关于更容易的部分,不确定;我想说浏览源代码是最好的解决方案,但我不得不承认,这并不“容易”——发现这么大的代码库几乎从来都不是“容易”的......
--enable-debug)