Pull to refresh

Затмение, лисичка и xdebug

Reading time4 min
Views3K

Длинное и пространное вступление



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

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

1. Психологическом: Стараюсь не злиться на того кто это написал, а
просто разбираюсь с тем как это работает. Не поверите, в области
висков от этого становится непривычно легко, лицо становится более
доброжелательным и код выглядит более понятным.

2. Организационном: Применяю краткую выжимку из GTD: а) собирай все,
б)перечитывай то что собрал в)делай это. У этого направления есть
также техническая сторона, но о ней не сегодня. Главное при
перечитывании (пункт б) не «возвращать» дела не приняв каких-либо
внятных решений по их дальнейшей судьбе. К слову «разобраться с этим
позже» это вполне внятное решение.

3. Техническом: Вот об этом направлении моего селфимпрувмента вы
сможете наконец прочесть после столь длинного и, как обычно у меня
получается, пространного вступления.

Поствсупление



Не торопитесь с выводами, я не ошибся с названием статьи. PHP — технология парадоксальная. На ней иногда пишут наверное самый
непонятный код на свете. Объемы этого самого «уже написанного» кода
представить не возможно. Программистов тоже не мало. И что вы себе
думаете — вся эта пехота в основном до сих пор дебагает свои программы
при помощи старого доброго echo-debugging. У этого есть один
недостаток который мне усложняет жизнь, после каждой сессии такого
дебага, что бы убрать результаты своей деятельности я делаю revert и
если надо провести похожую сессию дебага спустя какое-то время все
надо начинать с начала. Чего уж там говорить о случаях когда без
любимого die() просто не обойтись.

На хабре уже не раз описывался этот инструмент. Также как минимум
дважды описывалась его установка и даже один раз упоминался XDebug
helper. Однако простого руководства настройки всего вместе в одном
документе я не нашел. Потому не привнеся ничего нового я просто стану
таким себе интегратором нескольких документов и статей дабы облегчить
жизнь всем кому это требуется, и их интернет провайдерам.

Установка XDebug



Что под windows, что под unix конфигурационная часть в общих случаях
одинакова:

zend_extension_ts=full_path_to_xdebug.(so|dll)
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_host=127.0.0.1
xdebug.idekey=eclipse

Причем вам не стоит заботится об этих параметрах, как показывает
практика(3 установки на win, mac и ubuntu) все это работает без
изменений на вполне стандартных установках этих систем. Разве что есть
замечание про mac os x — поднятый из портов xdebug не захотел работать
с таким же образом установленными apache2+php. Потому там он был
собран ручками один в один как описано тут
xdebug.org/docs/install в разделе Compiling.

Что немаловажно:


Если вы используете apache2 и php как модуль, то вам надо качать
отсюда xdebug.org/download.php threaded сборку, иначе(apache
1.3 + php as module или php как CGI) non-threaded сборку. Это все что
вызывало осложнение с установкой в моем случае.

Как водится перезапускаем apache и проверяем php --re xdebug — если
все в порядке — вы поймете это.

Установка XDebug helper



Все так же просто как если бы вы ставили обычное расширение firefox:
https://addons.mozilla.org/en-US/firefox/addon/3960

Настройка eclipse PDT



Смело идемте в Window/Preferences(для Mac Cmd+,) в фильтре вбиваем
Installed Debuggers. Выбираем в результатах(мало ли у кого как)
PHP/Debug/Installed Debuggers. И беремся за настройку XDebug:
единственное что надо сделать так это установить Accept remote session
(JIT) поле хотя бы в localhost или в любое что для вас более актуально
кроме off.

Финал



Это собственно все что надо сделать. Дальше один сплошной фан в
работе. Открываете Ваш продукт в firefox, жмете на иконку xdebug
helper и делаете что-то с вашим продуктом(один раз). Теперь
переключаетесь в PDT и о чудо там должно быть окно предлагающее вам
переключится в php debug перспективу. А дальше дело за малым — или
F6,(F6) и иногда F5 или ставьте брекпойнты и шагайте быстрее. Вообще
говоря дело не хитрое.

Возможные проблемы


(1) Иногда debug сессия не начинается

Решается в три шага: 1 чистите куки XDEBUG от вашего development
домена и если не помогло перестартовываете ff и дальше если все по
прежнему не работает — перезапускаете eclipse(к слову у меня такое
редко случается)

(2) Иногда debug сессия начинается и тут же прерывается с выпадением
окошка в eclipse о неожиданном останове сессии

Надо убрать все Expressions в одноименном окошке. Такое происходит
когда в пердыдущей сессии вы пользовались функцией Watch для того что
бы просмотреть значение какой-то переменной или выражения.

Финальный аккорд



Обратите внимание что все что предложено к настройке в этой статье
абсолютно свободно и бесплатно. Желаю всем что бы все что вам
действительно необходимо в работе было или свободным или по карману ;)
Tags:
Hubs:
+3
Comments16

Articles