Отладка скриптов в Zend Studio

    Не так давно, я обратился к хабро-общественности за помощью в этом топике. Тогда мне не только не помогли, но еще и заминусовали карму. Посему разбираться пришлось самому…

    Итак, сегодня я расскажу об локальной отладке PHP кода. Существует много способов. Начиная от пресловутых var_dump и die() и заканчивая xDebug и FirePHP. Я же поведую о, на мой взгляд, самом удобном способе отладки — отладка в среде Zend Studio. Будет рассматриваться версия 5.5.0 для Windows. Пользователи PDT в комплекте с ZendStudio могут использовать xDebug, как описано в этой статье.

    Для полноценной работы нам понадобится 3 компонента:
    1. сам Zend Studio 5.5
    2. библиотека «Zend Debugger»
    3. Zend Studio Toolbar для Firefox


    После установки Zend Studio, необходимо поставить библиотеку для отладки. Останавливаем веб-сервер. Выбираем в архиве версию, соотвествующую вашей версии php, и копируем ее в каталог с PHP-библиотеками. Далее открываем php.ini и добавляем туда следующие строки:

    zend_extension_ts=path/ZendDebugger.dll
    В этой строчке мы указываем полный путь до библиотеки.

    zend_debugger.allow_hosts=127.0.0.1
    zend_debugger.expose_remotely=always


    Запускаем сервер и смотрим phpinfo. Там дожна появиться следующая секция:

    phpinfo

    Из архива с библиотекой, кидаем файл dummy.php в наш рабочий проект.

    Далее нам надо настроить саму среду отладки. Идем в Tools>Preferences>Debug и вносим измения, согласно скриншоту:
    image

    Теперь осталось только установить zend toolbar и можно начинать отлаживать наш код.

    Итак, как это происходит на примере обработчика некой формы:

    1. Открываем в Firefox страницу с формой. На панели ZT выбираем «All pages on this site». Не знаю почему, но у меня работает только этот вариант.
    image
    2. В Zend Studio ставим необходимые брейкпойнты (точки останова) в скрипте-обработчике формы.
    3. Сабмитим форму.
    4. После сабмита, становится активным Zend Studio с запущенным процессом отладки. Также становятся активны кнопки на панели отладки. Вот что они значат:

    «step over» — выйти из функции или вложенного файла
    «step out» — перейти на предыдущую строку
    «step into» — перейти на следующую строку
    «go» — запустить выполнение скрипта до первого брейкпойнта
    «go to cursor» — запустить выполнение скрипта до курсора
    «run» — полностью выполнить скрипт

    Значение остальных кнопок и панелей, я думаю, в обьяснении не требуется.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 85

      +1
      Пользователи PDT в комплекте с ZendStudio могут использовать xDebug, как описано в этой статье.
      Поправьте ссылку. Там про xdebug вообще ни слова.
        +2
        Спасибо, исправил.
        +7
        Когда я программировал на C++ отладка кода таким образом (имею ввиду брэйкпоинты) была просто необходима, а вот что касается PHP, то мне вполне хватает, как выразился автор — «пресловутых var_dump и die()», я могу отладить довольно большой скрипт при помощи только лишь ECHO и PRINT_R. А отладка через ZendStudio займёт больше времени, чем сама разработка скрипта )).
          0
          Весьма спорное утверждение, отладчик ZS — решение профессинального уровня.
            –5
            А вам не кажется, что использование операторов echo, print_r, var_dump — замусоривает код?

            А отладка через ZendStudio займёт больше времени, чем сама разработка скрипта )).

            Сравните, сколько времени займет у вас обвязать все конструкции, в которых вы сомневаетесь, а затем не забыть убрать все лишнее, или один раз прогнать ваш скрипт через дебаггер…
              +4
              Вы видимо что-то не так поняли, я их ставлю исключительно для отладки, а затем все удаляю.

              Это просто, т.к. в скрипте я не делаю еханья, работаю исключительно через шаблоны. Поэтому не понимаю о каком засорении вы говорите. Тем более если код хорошо оформлен, тогда вообще проблем не возникает…
              0
              Ну тут все зависит от сложности «скрипта», который, в основном своем является уже вполне таким хорошим двухуровневым приложением с довольно хорошо разришевшей бизнеслогикой. Хотя, чесноговоря и тут в основном все можно порулить вар дампами — все таки код гораздо проще нежели на сях где к примеру отловить утечки памяти без дебагера или потерю объекта у указателя — практически нереально.

              А отладчик в зенд студио действительно хорош, но 99% девелоперов — и не нужен вовсе. А вот использовать профайлер, даже для того что бы быстро разобратся в незнакомом коде — считаю очень полезным. Время, да и нервы экономит, когда пройдясь по дереву вызовов можно в десяток раз быстрее добратся до нужного тебе места не засоряя голову инфой которая в данный момент не актуальна.
              0
              Вот ссылка на Zend Studio Toolbar для Firefox 3 если кому надо.
                +1
                Кстати почему 5.5, а не Эклипс? Эклипс все же помощнее будет
                  +1
                  В смысле не PDT, а Zend Studio Eclipse
                    +1
                    Не знаю… Мне вполне хватает возможностей, предоставляемых чистым ZS. А что есть «вкусного» у PDT?
                      0
                      Про PDT ничего сказать не могу, знаком с ним весьма поверхностно.

                      Zend Studio for Eclipse — сейчас мейнстрим, это главное. Ну и эклипс он и в африке эклипс — то есть куча готовых плагинов платных и бесплатных со всеми вытекающими. Ну и много фичей в отличие от 5.5 стали работать как надо.

                      Но вообще хочется сделать небольшое отступление и сказать, что хотя Zend Studio — лучшая среда разработки для PHP, но она к сожалению там многого нет того, чего бы хотелось. А хотелось бы
                      1) крутого UML-редактора с прямым и обратным преобразованием, настройкой стиля расположения файлов
                      2) Более умного автокомплишна, в частности для элементов массива и в циклах foreach
                        0
                        Ну вот опять ;)

                        В основе Zend Studio for Eclipse лежит как раз Eclipse и PDT. Если знакомы с Zend — знакомы с PDT.
                          +1
                          Да, но все же PDT != ZSE (по функционалу)
                            0
                            Вы сравниваете несравниваемые вещи. PDT это часть ZSE.
                            ZSE = Eclipse + PDT + плагины

                            Разница только в наборе плагинов.
                            На работе есть лицензии на ZSE, а я использую самосборный Eclipse + PDT. С помощью свободно доступных плагинов я воспроизвел 90% функционала ZSE.

                            Разница между ZSE и самосборной системой минимальна.

                            Я всего навсего хочу сказать, что ваше утверждение «Про PDT ничего сказать не могу, знаком с ним весьма поверхностно» в корне неверно. Вы знакомы с PDT ровно настолько же, насколько и с ZSE.

                            Имейте в виду также, что PDT разрабатывают как раз парни из Zend.
                            • UFO just landed and posted this here
                                0
                                Боюсь, что материала на статью не наберется. Максимум — на средней длины комментарий. Вот здесь уже все написано habrahabr.ru/blogs/eclipse/40785/#comment_991729
                                • UFO just landed and posted this here
                                    0
                                    30 минут, от силы час. Тем более, что я знаю, что мне надо и где это лежит.

                                    С другой стороны, платить почти 400$ за то, что можно сделать самому… Не жалко денег?
                                    • UFO just landed and posted this here
                          0
                          Zend Studio — лучшая среда разработки для PHP

                          спорное утверждение ;)
                            0
                            Типа это шутка? :)

                            (Очень не хочется холиваров, но может я проспал и появилась php-шная ide круче ZS?)
                              0
                              холивары не нужны)
                              phpEd — IDE, сравнимая по возможностям с zs. Было бы интересно увидеть результаты сравнения этих двух IDE, на основании которых вы говорите, что zs — лучше.
                                –2
                                phpEd — только под win, а значит сразу летит в топку.
                                  0
                                  мощнейший критерий для сравнения ))
                                  вы меня убедили, ZS — лучшая IDE
                                    0
                                    ZS — промышленный стандарт дефакто, в том числе за счет кроссплатформенности.

                                    Дофига крутых билдеров работают в лине и макоси. К тому же если говорить о бизнесе, там все немного сложнее чем у отдельно взятого программера…
                                      0
                                      Ну да ладно, надо завязывать с этой темой, все равно каждый останется при своем… ;)
                                    0
                                    Не только. Хотя я именно её не пользовал.
                                    0
                                    точно знаю чем phpEd круче — «tab key code completion»
                                    эклипс к сожалению такого никогда не умел… он даже в обычном code assist не позволяет использовать TAB для вставки подсказки… :(

                                    кстати, может я что-то упустил е уже появился подходящий плагин?
                                      0
                                      Чем Вас не устраивает ctrl + space?
                                        0
                                        привычки…
                                        да и после нажатия Ctrl+Space Tab тоже не работает… приходится Enter жмакать :(
                                        а в Idea, Visual Studio, UltraEdit, TopStyle, DreamWeaver — работает. хотелось бы некоей целостности, ибо за несколько лет использования Eclpse (ASDT, FDT, Flex, PDT, Oxygen и т.д.) жать на Enter я все еще не привык и чувствую себя неловко :/
                                      0
                                      phpEd познал JavaScript?
                                        0
                                        нет, но давайте проверим «познание» javascript в ZS
                                        простейший пример:
                                        var o = { f: function() { } }
                                        

                                        Что произойдёт, когда я наберу «o.» в ZS? Ничего. А где же функция f и методы Object, от которого неявно наследуются все объекты в javascript? Попробуйте те же действия в VS, например.
                                        ZS, конечно, показывает свойства и методы объекта document (или Math), но это, на мой взгляд, сомнительное преимущество ;)
                                          0
                                          Не забывайте, что к Eclipse без напряжения прикручиваем либо Aptana, либо JSEclipse, либо Spket — каждому на свой вкус — и получаем мощнючий JS IDE. А к phpEd что мы можем прицепить?
                                            0
                                            у каждой IDE есть достоинства и недостатки
                                            спор дальше бесполезен, я останусь при своём мнении: ZS — отличная IDE, phpEd — отличная IDE
                                  0
                                  1. Посмотрите в сторону NetBeans, который 6.5, там есть UML редактор какой-то…

                                  2. К сожелению это нереально. Все таки пых, на уровне исходного кода не может предугадать что вернется у тебя под видом элемента массива. Хотя на уровне итераторов — разрулить этот вопрос можно было бы…
                                  0
                                  отжирание лишней памяти и громоздкость интерфейса вот какие фичи я нашел в ZS for Eclipse и остался на ZS 5.5.1
                                    +1
                                    Насчет памяти — вроде эклипс как эклипс
                                      +1
                                      У вас 512 мегабайт в 2008 году? Что лишние 150 метров отожратые виртуальной ява машиной — являются критическими? А про громоздкость интерфейса могу сказать одно — вы даже не попытались потратить 5 минут, что бы понять, что интерфейс там можно настроить под себя так, как вам будет угодно.

                                      Вы похоже один из тех, кто вопит «я не буду ставить висту потому что она тормозит и багов полно в ней», видя эту ось только по скринам и мифическим рассказам в интернете.
                                      0
                                      Возможность ставить плагины — вменяемый svn клиент хотябы.
                                        0
                                        Главный минус Зенда 5 — это то, что в нем одновременно можно открыть только один проект. Ну и то, что он платный. Я долго использовал Зенд 5, потом поковырял 6-й, а сейчас перешел на PDT и очень доволен. Вместо Зенд Дебаггера — XDebug.
                                  • UFO just landed and posted this here
                                      +3
                                      А я пишу в фаре, а для отладки использую echo «HUY»;
                                        +3
                                        а я если надо чтото «быстро» отдалить, пишу echo «превед!», я даже назвал это «метод отладки преведом» :)
                                          +6
                                          Настоящий программист должен быть ленив:

                                          Common.php, line 23:

                                          /**
                                          * Лучше даже не думать об этом ;)
                                          *
                                          */
                                          define('K', 'Канареечка жалобно поет!');

                                          метод отладки канареечкой круче метода отладки преведом:

                                          echo K;

                                          Мое кунфу сильнее твоего © :-D
                                        0
                                        Друзья, пожалуйста скажите где лучше всего русским языком раскрыт вопрос работы с ZendStudio for Eclipse? Я новичок, но очень хотел бы это все освоить.
                                          0
                                          Наверное нигде. По крайней мере на русском чего-то такого не встречал. А что встречалось — то было ужасное и неинформативное чтиво.
                                          0
                                          Я в своё время я делал описание Zend Studio Toolbar. Там же частично затронута тема отладки. www.parabox.ru/zend/toolbar/
                                          Под категорией Zend кому-нибудь может найдет что-нибудь интересно для себя.
                                            0
                                            спасибо, поищу :)
                                            По теме: Автор молодец, что разобрался с вопросом и поделился своими результатами, респектище!
                                            Не по теме: После установки ZendStudio for Eclipse перешел обратно на 5.5.1, какой-то громоздской показалась.
                                              0
                                              Аналогично, пытался перейти на Zend Studio for Eclipse, надеялся что памяти будет кушать поменьше, но оказалось наоборот — кушать стал в два раза больше!
                                                0
                                                Не знаю, даже с гигом оперативы полет нормальный
                                                  0
                                                  Наверное потому что у меня в ноуте можно установить максимум 768MB. И она вся уже установлена :)
                                                    0
                                                    вот блин… :)
                                                      0
                                                      это что такой за ноут? а если одна планка на 1 Гб то что покажет? может стоит для професиональной работы применять нормальные инсрументы, в том числе и железо?
                                                        0
                                                        Я ждал подобного комментария :)

                                                        Ноуту моему уже 6 лет. Это один из первых Centrino-ноутов — ASUS M2400N. И он до сих пор работает без каких либо проблем, практически 24 часа в сутки с 2003 года. Единственное, только расширил HDD с 40гб до 160гб.

                                                        Я придерживаюсь консервативных взглядов и не меняю технику как варежки :) Зачем, если железяка работает. А программингом давно уже не занимаюсь, поэтому большие мощности в моей текущей, профессиональной, повседневной работе не требуются.

                                                        P.S. аналогичная ситуация с телефонами, сижу на смарте Qtek8310 в качестве основного голосового телефона и Qtek9000 в качестве коммуникатора и второго телефона. Очень ностальгирую по Motorola V3690 :)
                                                        0
                                                        Советую почитать что такое eclipse. Если в двух словах — платформа для разработки на яве. Если так же в двух словах о возможностях ее — они там все в виде плагинов. Если вам от нее нужен только редактор php с код ассистом и еще чем-нибудь таким, дефолтным для разработки — то можно серьезно порезать тот же неон, и будет он быстрее чем 5.5.

                                                        А можно сделать как я — закинуть еще кучу плагинов, к примеру от той же Aptana Studio и использовать ее из Zend Studio.

                                                0
                                                Вопрос следующий как заставить Eclipse нормально отображать содержимое строк в UTF-8, а то сейчас одни кракозябры «показывает»?
                                                  0
                                                  Дефолтная кодировка проета через настройки. UTF-8 для эклипса — родное
                                                    0
                                                    Проиллюстрирую скриншотом, чтобы было понятно:
                                                    floomby.ru/content/a51471e1-87f9-4c50-bdfc-a2a890fa1361.html

                                                    Кодирофка проекта стоит UTF-8 соответственно.
                                                    Скажу больше: в настройках PHP Debug, в опциях Debug Transfer Encoding и Debug Output Encoding тоже стоит UTF-8.
                                                      0
                                                      у Вас эклипс на винде установлен?
                                                        0
                                                        Да. И сервер соотв. тоже.
                                                          0
                                                          попробуйте поменять системную кодировку командной строки на utf-8 (выполните chcp 65001 в командной строке)
                                                  0
                                                  Наверное, оффтоп, но тоже про отладку. Упомянутые в комментариях «echo», «print_r», «var_dump» и т.д. актуальны, когда можно увидеть резельтат их выполнения. В противном случае придется делать запись, например, в файл, и переоткрывать его для просмотра результатов. Что бы облегчить этот обезьяний труд, использую консольные возможности — а именно, tail (http://ru.wikipedia.org/wiki/Tail).
                                                    0
                                                    Отладка и брейкпоинты — это безусловно хорошо. Но по моему опыту работы с зендовским дебаггером могу сказать, что разобраться с его помощью с архитектурой проекта, который писал не ты, — намного проще. Один запуск построчного выполнения программы и мы получаем весь стек вызовов, что очень полезно для понимания работы того же Zend Framework.
                                                      0
                                                      Не успел дописать, случайно отправив предыдущее сообщение.

                                                      Хотелось бы добавить, что иногда помогает и использование профилировщика (очень интересные диаграммы, распределения времени выполнения и т.п.). Конечно можно говорить, что существую и другие варианты, кроме зенда (тот же xDebug), но по процедуре установки и удобству применения (интегрируемость со студией без проблем) это всё таки лучший на мой взгляд вариант.
                                                        0
                                                        Дада! Правда я для этих целей использую профайлер, а уже за интересущими вещами лезу в код и смотрю чо там и как :)
                                                          0
                                                          Согласен. Но иногда именно построчное выполнение даёт большее понимание, на мой взгляд (когда видишь что да как происходит).
                                                        –1
                                                        debugging sucks, testing rocks!!!
                                                          0
                                                          Сейчас настраиваю zend debugger для eslipse pdt, вроде все сделал норм, в phpinfo() все нормально отображается, как на скрине в посте, но при попытке дебага через тулбар апач рестартится, в логах сообщение что-то вроде:
                                                          [Zend Debugger] Can't connect to 127.0.0.1

                                                          Ничего не могу понять чтобы это значило… В инете тоже не нашел…

                                                          PS:
                                                            0
                                                            случайно отправилось) так вот,
                                                            PS: win xp sp2, xampp (php 5.2.6, apache 2.2)
                                                            0
                                                            не раскрыта тема установки ZendDebugger вместе с ZendOptimizer
                                                              0
                                                              дебаггер конечно хорошо, но быстро мне помогает старая добрая функция:

                                                              /**
                                                               * Prints human-readable information about a variable.
                                                               * if variable is array, it goes by print_r, else - var_dump.
                                                               *
                                                               * @param mixed $variable
                                                               * @param string $name Variable name.
                                                               */
                                                              function pv($variable, $name = false)
                                                              {
                                                              	echo '<pre>'.PHP_EOL;
                                                              
                                                              	# if we passed the name
                                                              	if ($name)
                                                              		echo $name.' = ';
                                                              
                                                              	# here we divide output to array or any another variable type
                                                              	if (is_array($variable))
                                                              	{
                                                              		# again, name here also help with count elements
                                                              		if ($name)
                                                              			echo '('.count($variable).') ';
                                                              			
                                                              		# print array
                                                              		print_r($variable);
                                                              	}
                                                              	else
                                                              		var_dump($variable);
                                                              
                                                              	echo '</pre>'.PHP_EOL;
                                                              }
                                                              

                                                              • UFO just landed and posted this here
                                                                  0
                                                                  прочитайте первое предложение в моём комментарии.
                                                                  • UFO just landed and posted this here
                                                                      0
                                                                      спасибо за расширенный ответ. я в курсе.
                                                                      • UFO just landed and posted this here
                                                                          0
                                                                          вам хочется пообщаться? :)
                                                                          я не таскаю её из проекта в проект. у меня обычно проект на пару лет…
                                                                          • UFO just landed and posted this here
                                                                0
                                                                Если у кого нить есть документация по эклипсу на русском выложите.

                                                                Столкнулся с двумя проблемами: не переносятся строки кода, хотя в настройках вроде сделал во всех пунктах перенос и в упор отказывается воспринимать ютф-8, пришлось возвращаться на 5,5.
                                                                • UFO just landed and posted this here
                                                                    0
                                                                    Вот так не переносятся.

                                                                    С кодировкой попробую :) я ее пытался найти по аналогии с 5.5.

                                                                    Учу…
                                                                  0
                                                                  Хотелось бы поднять вот какую тему:
                                                                  Ряд движков используют для расширения систему так называемых плагинов.
                                                                  в этом случае патчить код не нужно, просто в нужных местах вставлены операторы eval. При попытке «запрыгнуть» внутрь eval в komodo ide появляется ошибка. Думаю, на любом отладчике на базе xdebug будет то же самое.

                                                                  Чем и как отлаживать код внутри таких eval?
                                                                  При попытке «запрыгнуть» внутрь eval в komodo ide появляется ошибка. Как с этим в остальных отладчиках? конкретно в zend stuido?
                                                                    0
                                                                    Подскажите как настроить ZendDebugger и Zend Optimizer в Denwer
                                                                      0
                                                                      >Далее нам надо настроить саму среду отладки. Идем в Tools>Preferences>Debug и вносим измения, согласно скриншоту:

                                                                      Картинки нет.

                                                                      Only users with full accounts can post comments. Log in, please.