Как отладить во внутреннем коде PHP? - PullRequest
4 голосов
/ 24 марта 2010

Кто-нибудь здесь пробовал или это возможно?

Я использую PHP уже несколько лет, но никогда не знаю точно, какие скрипты написаны на языке c.

Есть ли способ войти в это?

Ответы [ 3 ]

7 голосов
/ 24 марта 2010

Я немного взломал Zend PHP. Я считаю, что это overly clever, некоторые люди даже называют его deliberately obfuscated in plain view. Исходный код PHP - это изменяющее сознание (или разрушающее) вещество, в зависимости от того, насколько вы хороши в расшифровке очень загадочных макросов. Это мое представление о ядре.

Написание расширений, однако, - легкий ветерок Как только вы освоитесь с помощниками Zend, большинство людей с продвинутыми знаниями для начинающих / среднего уровня C могут пройти базовое расширение. Там также много примеров. Одна из лучших частей PHP - это то, насколько организована система сборки, добавление новых вещей относительно безболезненно. Приложив немного усилий и терпения, практически любая библиотека C будет легко расширена до PHP.

Если вы не очень хорошо разбираетесь в C (и что граничит со злоупотреблением препроцессором), взгляд на ядро ​​PHP не даст вам много понимания, и это не очень хорошая вещь ссылаться, если вы изучаете C самостоятельно.

Переезд:

Не позволяйте тому, что я сказал, или тому, что кто-то еще может сказать, отговаривают вас от захвата кода и поиска себя. При этом, что касается отладки, идет:

  • Valgrind (если вы не используете много подавлений) не очень полезен. PHP (насколько мне известно) использует чтение, оптимизированное для Arch, подобно новым версиям glibc. То есть он будет читать 32 бита, даже если он проглатывает только 8 бит и завершающий NULL.

  • Я никогда не находил GDB очень полезным с PHP. Большая часть магии в макросах, которые очень трудно отследить.

  • Вы быстро увидите функции регистрации ошибок Zend и их версию утверждений. Используйте их, отладка printf () практически бесполезна, если только вы не отлаживаете приложение CLI.

  • Сборка мусора может заставить вас видеть странные вещи при использовании таких инструментов, как массив Вальгринда. Профилирование использования кучи в PHP - это искусство, которое я еще не обнаружил.

Наконец, я хотел бы сказать, что всегда приятно видеть, как кто-то заглядывает под капот своего языка. SO может использовать некоторые вопросы, которые помогут де-мистифицировать ядро ​​PHP, поэтому, пожалуйста, не стесняйтесь публиковать больше по мере продвижения:)

Также, помните, Zend - не единственная кузница, которую делает php . Хотя совместимость с Zend имеет первостепенное значение, если вы надеетесь, что он будет принят, каждый по-прежнему свободен делать свое дело.

1 голос
/ 24 марта 2010

Я никогда не отлаживал C-код PHP (ни расширений) , но иногда я генерировал обратные трассировки в случаях сбоев в расширениях PHP.

Эта страница может помочь, о чем: Генерация обратного следа GDB .

Начиная с этого момента, возможно, вы сможете пойти дальше ...

0 голосов
/ 24 марта 2010

Из некоторых ваших вопросов звучит так, будто вы не знаете, что PHP с открытым исходным кодом, вы можете скачать полный исходный код его и просмотреть все функции языка Си Если вам нужна возможность поиска и отладки, вы должны делать то, что сказал Паскаль МАРТИН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...