Есть ли инструмент для преобразования встроенных функций php в реализацию c? - PullRequest
0 голосов
/ 20 февраля 2010

Мне любопытно, как реализованы некоторые встроенные функции, но поиск этого непосредственно в источнике занимает очень много времени, есть ли инструмент, который может автоматизировать это?

EDIT

Или есть инструмент, который может отлаживать код, который на самом деле выполняется?

Ответы [ 3 ]

1 голос
/ 20 февраля 2010

Большинство (все?) Функций, к которым можно получить доступ из PHP, определены в каталоге ext / в исходном коде PHP. Если у вас есть инструмент рекурсивного поиска, выполните поиск PHP_FUNCTION - если вы сохранили результаты этого поиска в текстовом файле, это был бы довольно хороший «индекс» для определения места, где определена встроенная PHP-функция.

Действительно основной материал - в ext / standard.

Некоторые редкие «функции» реализуются непосредственно в виде кодов операций в виртуальной машине Zend, в которую компилируется PHP, поэтому не существует четко определенной функции C как таковой. Я думаю, что strlen - это, например, такая функция.

0 голосов
/ 20 февраля 2010

По поводу отладки кода C, который выполняется, я полагаю, можно использовать что-то вроде dbg ;Сначала вам нужно будет перекомпилировать PHP с режимом --enable-debug.

Для получения дополнительной информации вы можете взглянуть на:


Я никогда не использовал это для отладки самого PHP, но я использовал эти двастраниц, чтобы сгенерировать некоторые обратные следы сбоев, которые у меня были с расширением, и это работало нормально, насколько я помню.


В качестве описания: используя PHP, скомпилированный с --enable-debug, вам, возможно, придетсяперекомпилируйте некоторые из используемых вами расширений и измените способ их загрузки (например, для Xdebug) ;а некоторые другие могут просто не работать вообще.

0 голосов
/ 20 февраля 2010

Я считаю, что вы должны взглянуть на это .
Facebook разработал инструмент для преобразования PHP-кода в c ++.
Так что я думаю, что он может справиться и с C в некоторой степени.

...