Отладка web-приложений Eclipse + easy Xdebug

Posted on: April 29th, 2011 by Heart No Comments »

В качестве примера для отладки возьмем CMS Made Simple. Предполагается, что Eclipse + XDebug уже настроен. Если нет, то об этом было написано тут. Для удобства использования дебаггера нам нужно установить easy Xdebug add-on для браузера Firefox. Все инструменты для отладки у нас есть, приступим.

С системой CMS Made Simple не знаком, именно поэтому её выбрал в качестве примера. Устанавливаем систему и видим белый экран вместо сайта, в админку заходит нормально. В логах ничего нет, самое время проверить дебаггер. Ради интереса открываем FireBug, обновляем страницу чтобы узнать, что там посылается и о чудо, вместо белого экрана видим сайт. Ну ничего, дебаггер все равно проверим.

Создаем в Eclipse новый проект. Для отладки нужно создать новую конфигурацию. Выбираем в меню Run–>Debug Configurations… Слева выбираем PHP Web Page. Кликаем правой кнопкой и жмём New. Справа видим несколько вкладок: Server, Advances, Common. Даем имя конфигурации – cmsms. На вкладке Server выбираем дебаггер – XDebug. PHP Server – у меня много виртуальных хостов, поэтому опция Default PHP Web Server мне не подходит. Создадим новый сервер со своим адресом. Жмем New. Название сервера – сmsms. Адрес – у меня это http://cmsms.lan. Нажимаем Finish. Теперь нужно указать файл запуска для конфигурации. Browse –> /cmsms/index.php. Так как код мы пока не видели, ставим – Break at First Line. Убираем галку Auto Generate для URL и подправляем адрес в строке ввода. Жмем Apply.

debug-configurations

Закрываем окно настройки конфигурации.
Жмем на зеленого жука Eclipse-bug. Будет предложено переключиться в перспективу PHP Debug. Соглашаемся и ставим галку Remember my decision. Т.к. в конфигурации мы указали останавливаться на первой линии, после запуска дебаггера он остановит скрипт на первой строчке с кодом. В нашем случае это оказалась 21 строчка. На вкладке Variables мы видим глобальные массивы и не инициализированные пока что переменные. Нажимая Step Over (F6) или Step Into (F5) мы можем продолжать выполнение программы без захода в тело функций и с заходом, соответственно Step Over & Step Into.

debug-configurations

Жмем пока что Terminate, красная кнопка, чтобы остановить отладку.
Заходим в настройки нашей конфигурации и убираем галку Break At First Line. Ставим точку останова на 21 строчке. Переключаемся в Firefox. Сейчас воспользуемся нашим аддоном для отладки. Загружаем страницу http://cmsms.lan. В правом нижнем углу браузера находим зеленого жука firefox-bug и клацаем по нему. Для того, чтобы плагин сработал, необходимо чтобы жук был вот в таком состоянии firefox-bug-started Теперь жмем F5, чтобы обновить страницу. В этот момент страница должна подвиснуть, т.к. аддон сделал свое дело и запустил отладку в Eclipse. Если сейчас перейти в него, то можно увидеть, что запущена перспектива PHP Debug и скрипт остановлен на точке останова. Картина такая же как и на первом скриншоте. По мере того, как мы будем проходить дебаггером строчку за строчкой, в браузере будут появляться элементы интерфейса и выполняться скрипты. Таким образом, можно находить места в интерфейсе web-приложения, которые нужно отладить, после чего жать на жука и обновлять страницу. Разумеется, точка останова в коде должна стоять там, в каком месте предполагается отлаживать какой-либо элемент интерфейса. Например, нам интересно, что происходит в CMS Made Simple при попадании на страницу логина. Нужно найти место в коде, где обрабатывается процедура залогивания, чтобы там поставить точку останова. Ссылка на административную панель была дана при установке системы, заходим по ней, предварительно открыв FireBug, http://cmsms.lan/admin. В фаербаге видим, что запрашивается файл login.php в папке admin. Заходим в Eclipse и ставим точку останова в нужном месте.

Переключаемся в Firefox, жмем на жука и обновляем адрес http://cmsms.lan/admin. Приложение снова подвисает. Переключаемся в Eclipse и идем по коду через F6 (Step Over). Наблюдаем, как инициализируются переменные. В какой-то момент, отладка прекратится и в браузере появится форма для ввода логина и пароля. В перспективе PHP Debug мы можем наблюдать файл, на котором остановилась отладка. Допустим, мы посмотрели, что происходит во время загрузки формы залогивания и какие переменные инициализируются. Теперь посмотрим что происходит во время залогивания. Вводим логин и пароль, жмем жука и нажимаем кнопку отправить. Переключаемся в Eclipse. Идем через Step Over. Наблюдаем похожий алгоритм инициализации переменных, но теперь он пойдет немного по другой ветке. Скрипт обнаруживает в супер-глобальном массиве $_POST данные о логине и пароле и начинается процесс проверки и залогивания. Все это можно наблюдать в перспективе PHP Debug Eclipse.

Вот собственно и все. Единственное, что стоит отметить, что из-за какого-то глюка точки останова могут не убираться из вкладки Breakpoints, PHP Debug-перспективы, если их убирать в коде. Мало того, там могут оставаться точки из других конфигураций. Поэтому советую очищать точки останова на вкладке Breakpoins, нажимая на Remove All Breakpoints remove-all-breakpoints

Leave a Reply