Отладка PHP-приложений с помощью PhpED IDE

В тот момент когда размер исходного кода PHP-приложения переваливает за несколько тысяч строк и на этапе тестирования в нем выявляются логические ошибки, то приходится прибегать к отладке.

Часто для этого используются конструкции и функции языка в разных сочетаниях:

1
echo, exit, var_dump(), print_r()

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

В PHP нет встроенных средств отладки, но можно использовать внешние отладчики, подключаемые как отдельные расширения (например xdebug, DBG, Zend Debugger). В NuSphere PhpED используется расширение DBG, которое по совместительству является ещё и профайлером.

Отладчик в PhpED по праву именуется интерактивным. Он поддерживает отладку WEB-приложений по следующей схеме:

  1. Запускаем отладчик.

  2. Переходим в интересующий нас участок кода и устанавливаем breakpoint.

  3. Открываем браузер.

  4. Запускаем скрипт используя адресную строку браузера или отправив данные через форму.

  5. Отладчик вываливается на установленной точке останова, пропустив весь код до нее.

  6. Далее мы можем просматривать значение переменных и выражений, историю вызова функций и т. д.

В этой небольшой статье я расскажу как настроить отладку с ипользованием PhpED и OpenServer. Те моменты которые касаются настройки OpenServer могут быть применены к любому WEB-серверу из коробки (Denwer, XAMPP) или установленному на *nix-системе. Итак, если все умственные усилия обнаружить ошибку закончились безрезультатно и хождение по форумам с просьбой разобраться почему неправильно работает скрипт потерпели фиаско, то переходим к настройке дебаггера.

Инструкция приведена для актуальных (последних) версий программ на момент написания статьи.

Настройка

  1. Находим в каталоге с установленной IDE DLL-файл с именем «dbg-php-X.X.dll», где X.X версия поддерживаемого интерпретатора PHP, установленного на сервере. В моём случае это будет «dbg-php-5.3.dll». Библиотека должна находится в каталоге «%PROGRAMFILES%\NuSphere\PhpED\debugger\server\Windows\x86_VC9\», т. к. PHP v5.3.16 скомпилирован с поддержкой VC90 runtime.

  2. Копируем его в каталог «%OpenServer%\modules\php\PHP-5.3.16\ext\», где %OpenServer% — директория с установленным OpenServer.

  3. Редактируем php.ini. Открываем контекстное меню OpenServer в системном трее. Далее: Дополнительно > Конфигурация > PHP-5.3.16. Добавляем строку содержащую:

    extension=dbg-php-5.3.dll

    Сохраняем и закрываем текстовый файл.

  4. Перезапускаем сервер.

  5. В любом скрипте делаем вызов phpinfo(). И убеждаемся, что на странице диагностики присутствует блок, посвященный библиотеке dbg-php-5.3.dll:

  6. В настройках проекта (Project > Project Properties) указываем: Root directory — корневой каталог проекта на компьютере; Run mode — HTTP mode (3rd party WEB server); Root URL — URL проекта по которому он доступен. Сохраняем изменения.

  7. Я предпочитаю не использовать глобальные настройки дебаггера в программе, поэтому в настройках отладчика проекта (вкладка Debugger) включаю использование специфических настроек отладки для проекта. И обычно снимаю флажок остановки на первой инструкции скрипта (Break on start). Как видно, там же можно указать на каких ошибках передавать управление отладчику.

  8. Установив точку останова, а так же введя в строке браузера URL-проекта. И дополнив URL GET-параметром DBGSESSID со значением большим нуля (ID сессии), мы поймаем исключение. В дальнейшем до момента закрытия вкладки браузера этот параметр можно исключить, т. к. он будет сохранен в cookie.

    http://example.com/?DBGSESSID=1

  9. В окне Locals видны значения всех локальных переменных.

  10. Остановить отладку можно по хоткею Ctrl + F2.

Советы: