schegloff's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Thursday, November 29th, 2007

    Time Event
    8:06a
    Неработающие breakpoint в Eclipse PDT 1.0, или Это не бага, это фича
    Как некоторые из вас возможно помнят, месяц назад я начал разбираться с CMS Drupal, чтобы сделать на ее основе новый сайт нейросоц.ру. Стандартный друпаловский форум мне, разумеется, не понравился, я взял модуль nodecomment и решил его слегка подправить, чтобы получить в результате что-то похожее на привычный "ленточный" ворлдкризис.ру. "Слегка" быстро превратилось в "основательно", пришлось ставить Denwer, вспоминать PHP, разбираться с Drupal API... В результате получилось, что я оказывается веду полноценный программный проект. А коли так, нужно настроить себе нормальную среду разработки, обеспечивающую пошаговую отладку как моего собственного, так и друпаловского кода.

    Погуглив "PHP отладчик", я через несколько ссылок вышел на восторженную заметку создателя Denwer Дмитрия Котерова Eclipse + phpEclipse: отличная работа с CVS и полноценный отладчик - и решил, что вот оно счастье. Фриварный продукт, рекомендация гуру - чего еще желать? Качать и работать!

    На этом моя толком даже не начавшаяся разработка закончилась, и началась "битва с комбайном" (Жванецкий).

    1. Скачал Eclipse PDT, поставил прилагавшийся к записи Котерова отладчик php_dbg.dll, прописал его в php.ini, запустил Eclipse. Обнаружил, что она знает только Zend и XDebug, а dbg знать не хочет. Пожал плечами и снова в гугль.

    2. Выяснил, что отладчик dbg давно вышел из моды, а самый современный и продвинутый сегодня - xdebug. Скачал с официального сайта версию под PHP 4, прописал в php.ini, убедился, что подключен. Запустил Eclipse, создал проект, указал XDebug отладчиком. Открыл свой друпал-проект, нажал волшебную кнопку Debug - и получил сообщение об ошибке. Запустил тот же проект под обычным Firefox - и опаньки, то же самое сообщение. Поменял php.exe с 4.4.4 (идет в составе denwer) на 4.4.7 (лежит на официальном сайте PHP) - та же картина. Пожал плечами и решил пробовать последний шанс - ZendDebugger.

    3. Скачал с официального сайта ZendDebugger.dll, прописал в php.ini, поменял в Eclipse отладчик на Zend. Открыл свой проект, нажал Debug - и ура, заработало! Выпил по этому поводу несколько литров пива, а на следующий день решил наконец поработать. Поставил в отлаживаемом модуле nodecomment точку останова (breakpoint), нажал Debug - и что это? terminated, скрипт отработал до конца и завершил работу. Не получилось у Eclipse объяснить отладчику, где нужно остановиться. А почему не получилось?

    4. Полез в Гугль и обнаружил, что не я один такой невезучий:
    ...ставлю breakpoint, но во время выполнения скрипта он не останавливается на этом брэйк поинте... - и тишина в ответ.

    5. Пожаловался приятелю, а он удивленно: а у меня все работает! Проверяй настройки. Может быть, ты не так отладчик ставил? Сам же кидал мне ссылку на статью, как устанавливать. Все по инструкции делал? Ага, щас. Когда я что делал по инструкции?! Но видно придется...

    6. Итак, открыл я в окошке браузера Устанавливаем и настраиваем Eclipse PDT и занялся нормальной установкой PDT с Zend-отладчиком. Хелп-Апдейт-НайтиИПоставить... Ищет апдейты Эклипс крайне неторопливо, причем бегунок поиска настроен таким образом, что когда поиск уже почти закончен, кажется, что еще искать и искать. Зенд-дебаггер скачался, поставился, однако в результате оказался нерабочим - несовместимость с текущей конфигурацией. Пришлось еще по два раза искать-ставить как апдейты для Эклипса, так и обновления для дополнительных модулей - но в конце концов (через сутки, если кому интересно) все скачалось и поставилось.

    Открываю свой друпал-проект, нажимаю Debug... ну, вы поняли :)

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

    I found a number of people having the same problem as myself. I found instances of people having this problem all the way back in January of 2007. I also found instances of people having this problem as recently as October of 2007! Every single time I found someone saying they had the problem, nobody ever had an answer for them!

    К счастью, Jason Poll оказался упертым парнем, и сумел раскопать решение. По ссылке вы найдете его на английском, а я дам в своем вольном пересказе. Итак, чтобы сообщить серверному PHP, что тому пора остановиться, Эклипс должен указать строку файла на сервере (PHP ведь имеет дело с ними, не так ли?), где это нужно сделать. На каком сервере, вот в чем вопрос!

    8. В настройках Эклипса есть PHP Server. Казалось бы, туда можно прописать любой URL, и все должно заработать. Так вот: ничего подобного. Путем многократных тыков было установлено, что Эклипс дружит с серверным PHP только в том случае, если этот локальный URL называется http://localhost. "Дайте им любой цвет, только пусть он будет черным". Во всех остальных случаях точки останова просто не срабатывают. Почему? Да потому, что сложно обеспечить взаимодействие всех этих Apache, PHP, MySQL, DNS, hosts, и т.д. и т.п. В англоязычной ссылке есть комментарий насчет переконфигурации Apache, но с ним я экспериментировать уже не стал.

    Резюме. Для своего denwer я запустил отладчик следующим образом:
    1) Eclipse PHP Server - http://localhost;
    2) все проекты кладутся в папки денвера home/localhost/project1, home/localhost/project2;
    3) Eclipse PHP Web Page (настройка серверной отладки), URL - галочка Autogenerate убрана, прописан прямой путь к проектам: http://localhost/project1, http://localhost/project2.

    А вот адреса типа http://test1.ru/drupal, http://test1.ru/neurosoc отладке не поддаются, хотя в браузере и открываются.

    После недельной возни со всеми этими отладчиками мне до сих пор не верится, что оно на самом деле работает :)

    << Previous Day 2007/11/29
    [Calendar]
    Next Day >>

Типа сайт Щеглова   About LJ.Rossia.org