SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы
НазадМетки: codelobster интерактивная среда разработки отладка программ php ide
Настройка XDebug в CodeLobster IDE
Перед запуском нового PHP проекта, нам следует подумать о работе над ошибками до того, как эти ошибки возникнут.
В PHP имеется специальное расширение - XDebug, предоставляющее возможность работать из среды IDE, выводить трассировку стека, получать данные профайлера, использовать брекпоинты и проводить отладку по шагам.
В этой статье мы изучим, как работает CodeLobster IDE в связке с XDebug, а так же рассмотрим настройку этого расширения на локальном сервере XAMPP.
Безусловно, CodeLobster позаботится о соблюдении правил синтаксиса языка благодаря подсветке кода, подсказкам по функциям и автозавершению.

В то же время программисты не застрахованы от логических ошибок в своих скриптах.
Например, в PHP возможна такая конструкция:
<?php
$a = array('a' => 'first', 'b' => 2, 'c' => true);
Или нечто подобное:
<?php $n = 5; //И где-то через 100 строчек кода... $n = 'User Name';
Конечно, в Java или в C++ такой трюк с массивами или переменными не пройдёт, так как это строго типизированные языки программирования.
Более того, само предназначение PHP как языка для построения динамических приложений, взаимодействующих с пользователями, обязывает программиста контролировать и подвергать всяческим проверкам подчас непредсказуемый пользовательский ввод.
Веб-разработчики, привыкшие к гибкости и широким возможностям PHP, должны платить за скорость проектирования, прилагая повышенное внимание при разработке своих приложений.
Включаем показ ошибок и предупреждений в PHP
Открываем в текстовом редакторе файл php.ini, который в нашем случае расположен в папке "D:\xampp-portable\php" и устанавливаем следующие параметры:
display_errors = On error_reporting = E_ALL
Можно осуществить настройку программно, вставив в начало скрипта такой код:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
E_ALL не требуется заключать в кавычки, так как это константа, включающая отображение всех сообщений об ошибках, а так же всех предупреждений.
Включение расширения XDebug и настройка IDE
Для того, чтобы активировать XDebug, откройте файл php.ini и найдите соответствующий раздел [XDebug]. Подключаем расширение, установив такие опции:
zend_extension = "\xampp-portable\php\ext\php_xdebug.dll"
Таким образом мы указали PHP движку расположение расширения.
xdebug.remote_enable = 1
Собственно, эта опция и включает отладку, позволяя дебаггеру подключаться к IDE и отправлять данные.
xdebug.remote_host = "127.0.0.1" xdebug.remote_port = "9000"
Устанавливаем хост и порт - это адрес машины на которой будет работать клиент, в данном случае - это наша IDE.
Запускаем XAMPP и открываем CodeLobster, переходим в главное меню программы -> "Tools" -> "Preferences", в открывшемся диалоговом окне выберем пункт "Debugger".

В качестве параметра "Virtual folder" выберем корневую директорию XAMPP "htdocs" - это та папка, в которой будут расположены виртуальные сайты и наш тестовый проект в том числе.
В поле "Start URL" укажите базовый адрес "http://localhost/" - это URL корневой директории виртуального сервера.
Значение опции "Port" оставляем по умолчанию, так как именно это значение используется дебаггером в большинстве случаев.
Нажимаем "OK" и можно приступать к рассмотрению тестового приложения. Созданный нами проект содержит один PHP файл с таким содержимым:
<?phpfor($i = 0; $i < 10; $i++){echo power2($i);}function power2($base){return pow($base, 2) . "<br />";}?>
Здесь мы в цикле вызываем функцию power2() и передаём ей текущее значение счётчика $i, последовательно, от 0 до 9. Этот метод возводит переданное значение в степень 2 и возвращает каждый полученный результат в отдельной строке.
Открываем исходный файл проекта в редакторе и устанавливаем точку остановки (брекпоинт) в начале файла или в том месте, с которого вы хотите начать отладку скрипта.
После чего жмём клавишу F5, приложение будет открыто в браузере по умолчанию и выполнение скрипта остановится на первом брекпоинте.

Теперь вы можете проходить по каждой строчке кода последовательно, нажимая клавишу F11, или по брекпоинтам, повторно нажимая F5.
Точки остановки добавляются и удаляются кликом мыши слева от номера строки в редакторе, или нажатием клавиши F9.

Причём, в каждый момент, когда курсор останавливается мы имеем возможность получить полную информацию о текущем состоянии приложения, пользуясь вкладками на нижней панели IDE.
Вкладка "Call Stack" позволяет проследить всю последовательность вызовов функций до текущего момента, а именно, тот путь, который прошёл интерпретатор по нашему коду.

Вкладка "Locals" отражает текущее состояние переменных в контексте нашего приложения. В данном примере можно на любом шаге в процессе отладки узнать значение счётчика $i, а так же содержимое глобальных и супер глобальных переменных, таких как $_GET, $_POST, $_SERVER и других.

Вкладка "Errors" показывает список возникших ошибок, сообщает нам тип ошибки, имя файла и номер строки, а так же краткое описание ситуации, что позволяет программисту быстро сориентироваться и исправить баг.

Полезной является возможность добавлять переменные в список наблюдения, так называемый Watch list. Воспользуйтесь для этого контекстным меню, кликните на переменной и выберите пункт "Add Watch" или с помощью горячих клавиш Alt + Shift + W.
Таким образом, открыв вкладку "Watch" вы сможете наблюдать за изменениями значений сразу нескольких переменных в то время как проходите дебаггером по своему коду.
Остановить процесс отладки можно в любой момент нажатием клавиш Shift + F5.
Итак, подведём итог:
CodeLobster легко интегрируется с XDebug, программа практически не требует настроек и процесс отладки организован предсказуемо и понятно даже для начинающего разработчика.
Настройка XDebug для взаимодействия с IDE, как вы смогли уже убедиться, тоже не вызывает никаких трудностей.
Теперь вы знаете эффективный способ ускорить процесс поиска и устранения ошибок в своих приложениях и сможете избежать громоздких конструкций в своём коде, наподобие функций var_dump() или print_r().