Отстранете грешки в PHP интерпретатора с GDB

Бих искал да използвам GDB, за да премина през C++ кода, който съставлява разширението php.so Apache. Искам да видя какво прави PHP, докато изпълнява PHP приложение. За предпочитане бих използвал IDE като Netbeans или Eclipse на LAMP система.


person rook    schedule 11.04.2010    source източник


Отговори (2)


  1. Искате да се сдобиете с компилация за отстраняване на грешки на mod_php (със символи) или създайте свой собствен (configure --enable-debug)
  2. Трябва да конфигурирате вашия Apache винаги да поддържа точно един екземпляр на работния процес (който ще бъде екземплярът, който отстранявате грешки), тоест, задайте MinSpareServers, MaxSpareServers и StartServers всички до 1 Също така се уверете, че всички параметри за изчакване са щедро зададени
  3. Използвайте gdb или всеки графичен интерфейс към gdb (като ddd или Eclipse CDT), за да прикачите към един и само работен процес на Apache. Поставете точка на прекъсване в един от източниците на PHP и т.н. и продължете.
  4. Насочете браузъра си към вашия уеб сървър и отворете PHP страница. Вашата точка на прекъсване ще се задейства. Ако искате да събудите дебъгера в определен момент от изпълнението на вашия PHP скрипт, генерирайте SIGTRAP от PHP и gdb обикновено ще ви задължи.

Забавлявай се!

person vladr    schedule 11.04.2010

Може би бихте могли да направите това на windows.

Въпреки това, най-добрият ви залог е да направите това на Unix кутия. Ще трябва да компилирате всичко с разрешено отстраняване на грешки. GDB ще се нуждае от достъп до тези директории за източник.

След това ще трябва да стартирате apache и след това да стартирате процеса.

За да си осигурите време за прикачване, докато натискате PHP/Apache с браузър, добавете извикване за заспиване в PHP скрипта. Ако ps, ще видите процеса в състояние на заспиване. Или можете просто да го накарате да запише идентификатора на своя процес във файл в tmp, преди да заспи.

person drudru    schedule 11.04.2010