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

PHP отладка

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

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


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-системе. Итак, если все умственные усилия обнаружить ошибку закончились безрезультатно и хождение по форумам с просьбой разобраться почему неправильно работает скрипт потерпели фиаско, то переходим к настройке дебаггера.

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

  • Microsoft Windows 7 SP1 x64 (en)
  • NuSphere PhpED Professional v7.0
  • OpenServer v4.6.1 (PHP v5.3.16)

Настройка

  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:
    Расширение DBG
  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.

Советы:

  • Не забываем включить отображение всех ошибок (E_ALL). В скрипте (не сработает при синтаксических ошибках):
    error_reporting(E_ALL);
    Или в .htaccess:
    php_flag display_errors 1
  • Не нужно рыть себе яму, используя оператор @ для подавления сообщений генерируемых выражениями.
  • Перед написанием участка кода (функции) чётко представлять какие будут поступать входные данные и что мы хотим получить на выходе.
  • Понимать, что PHP является динамически типизируемым языком программирования и ошибки могут обнаружены только после начала выполения скрипта, а не на этапе синтаксического разбора.