Меню Рубрики

Отладчик php для windows

Установка и настройка Xdebug


Есть очень хороший инструмент для отладки php кода — Xdebug. Сегодня я расскажу как его развернуть на своей машине, а также как настроить NetBeans IDE на работу с ним.

Немного о Xdebug

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

Помимо этого, расширение позволяет выполнять профилировку приложения и находить те части, которые замедляют его работу. Поддерживается также выполнение произвольного кода на точке останова. Xdebug стилизирует вывод ошибок, благодаря чему, читать ошибки становится гораздо удобнее. Кроме того, есть возможность самому указать, что будет выводиться при ошибке. На этом список возможностей не заканчивается, уж поверьте, у Xdebug также есть ряд других полезных при отладке функций.
В целом, расширение нужно, в первую очередь, для экономии времени разработчиков, так как позволяет быстрее локализовать ошибку в коде.

Установка Xdebug

Уже довольно давно Xdebug, как расширение для php, присутствует в репозиториях. Поэтому его установка очень проста, для этого введите в консоли следующую команду.

С установкой покончили. Перейдем к настройке.

Настройка Xdebug

Настройка расширения выполняется при помощи редактирования конфигурационных ini файлов. Тут есть два пути:
1. В php.ini создаем секцию [xdebug] и в ней задаем параметры.
2. Все параметры задаем в xdebug.ini, который хранится тут /etc/php5/conf.d/xdebug.ini
Тут решать Вам и только Вам.

Куда писать — определились. Определимся что писать?
Давайте я приведу список настроек, и поясню, что они означают:

После, необходимо чтобы наши изменения подтянулись.
Для этого нужно перезагрузить apache или php-fpm (в зависимости от того, что Вы используете).

Чтобы убедиться, что все хорошо, выведите
phpinfo();
Если такой текст имеется — значит все отлично:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans

Теперь проверим улучшенный var_dump:

Вы должны увидеть красивый стилизированный вывод содержимого массива.
Теперь создадим ошибку (забудем ; в конце строки)

Вы должны увидеть подробное сообщение об ошибке, представляющее собой таблицу.

Настройка PhpStorm

Настройка NetBeans IDE

Устанавливаем NetBeans, если он еще не установлен. Заходим в СервисПараметры. Переходим в меню PHP, далее вкладка Отладка (Debugging).
И указываем следующие значения.
Порт отладчика: 9000
Идентификатор сеанса: netbeans-xdebug
Хочу отметить, что порт сеанса, как и идентификатор сеанса могу быть другими. Например, можно указать идентификатор ide-xdebug , но тогда и в конфигах Xdebug придется указать такое же значение.

Остальные параметры настраиваем под себя.

Ну, а о том, как выполнять отладку — в другой раз.

Источник

Простой способ отладки программ на PHP

Я пользуюсь этим методом отладки программ на PHP уже лет, наверное, 10. И ещё ни разу он меня не подводил. Почему я решил поделиться этим способом с вами? Наверное потому, что больно смотреть на новичков, которые берут откуда-то код, или пишут приличную портянку сами, он (естественно) не работает и они начинают хаотично менять всё подряд, пытаясь каким-то способом “нащупать” то место, где таится ошибка. Но это на самом деле сложный путь, который не всегда приводит к результату. Итак, вот что я предлагаю.

Главное при отладке программ и поиске “багов” – это терпение и последовательность в действиях. Если вы не будете соблюдать пошаговый алгоритм, то ничего не получится, в итоге вы запутаетесь и ни к чему не придёте.

Сам пошаговый алгоритм сводится к последовательной расстановке меток в программе, обновлению страницы и наблюдению выводимой информации в браузере. Лучше всего начать всего с одной метки.

Каждая метка выглядит примерно так

Интерпретатор кода PHP, дойдя до такой метки сделает следующее: выведя “1” в браузер, он немедленно прекратит выполнение кода программы. Таким образом, вы узнаете, что выполнение кода программы дошло до этого места, так как на экране будет выведена единичка и это будет последнее, что отобразится в браузере. Нет ничего проще, чтобы узнать – доходит ли до этой точки интерпретатор.

Вы можете не ставить exit(), если абсолютно уверены в том, что код не обновляет страницу после вывода (нет рефреша).

Дальнейшие действия могут быть следующими:

  • Можно переместить отладочную метку по коду ниже, чтобы выяснить – доходит ли интерпретатор до этой точки кода. Очень удобно, если вам надо выяснить факт срабатывания if() или факт входа в метод/функцию.
  • Можно выводить не “1”, а что-то вроде “#1#” и потом искать его в исходном коде HTML браузера, чтобы не спутать отладочный вывод с обычным выводом (например, если страница содержит кучу других единичек).
  • Можно ставить сразу несколько меток в разных точках кода сразу, но эти метки непременно должны быть разные и желательно последовательные. Например, “#1#”, “#2#”, “#3#” и так далее. Так вы увидите в браузере все метки, до которых дошёл интерпретатор и сможете понять логику, которая в программе сработала.

Общее правило: продвигайтесь по коду очень медленно, стараясь не пропустить того момента, где таится баг. Старайтесь чаще использовать метод половинного деления.

Вывод значений переменных

Но что толку от того, что интерпретатор дошёл или не дошёл до какого-то места? Малоинформативно. Давайте добавим больше жизни!

Часто необходимо вывести значения конкретных переменных в конкретной точке кода. И тут нам пригодятся две мощнейшие функции – print_r() и var_dump(). Вот как их можно использовать.

Для того, чтобы увидеть содержимое переменной, используем print_r($var); или print_r($obj->var) если нужно посмотреть содержимое свойства конкретного объекта. Для того, чтобы увидеть значение true или false, используем var_dump(). Тут необходимо пояснить кое-что. Функция print_r() специально была придумана для того, чтобы красиво выводить значения разных типов. Причём она выводит и целые, и строки, и массивы и даже объекты. А вот true и false она не выводит, то есть вывод всегда будет равен пустой строке. Тут на помощь приходит var_dump(), который выводит точное значение и тип этого значения.

Использовать var_dump() везде я не рекомендую. Вывод, им генерируемый, выглядит намного запутаннее, чем вывод от print_r().

Итого, вот как будет выглядеть наша информативная метка:

Обычно я дублирую номер метки в обрамлении других символов, чтобы видеть, где закончился вывод тестируемых переменных. Это часто бывает полезно.

Можно ещё перед каждым print_r() выводить echo “var=”; чтобы понимать где и чьё значение отображается.

Замер времени выполнения части кода

Очень часто при профайлинге (а ещё чаще при поиске “тормозов” в коде) бывает необходимо замерить реальное время выполнения конкретного куска кода.

В PHP есть замечательная функция microtime(), которая возвращает текущее время в микросекундах. Если ей указать параметр true, то она будет возвращать его в виде числа с плавающей точкой, что нам и нужно.

Идея способа замера времени выполнения куска кода сводится к тому, чтобы запомнить текущее время перед началом этого куска и сравнить его с текущим временем в конце куска. То есть вот так:

При этом после метки мы увидим время, потраченное на выполнение кода в секундах. Часто вы будете видеть что-то типа такого: 1.233433E-05, это инженерная форма записи очень малых и очень больших чисел. Можно привести её в нормальный вид, добавив функцию sprintf():

Немного больше кода, но зато вы будете видеть нормальные числа вроде 0.000012, т.е. 12 микросекунд.

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

Спасибо за внимание, не забудьте подписаться, чтобы не пропустить очередную статью!

Источник

Отладка php в Visual Studio Code (Xdebug, Windows)

В некоторых случаях может возникнуть необходимость отладки приложений на php. Visual Studio code предоставляет такую возможность при условии установки дополнительного расширения PHP Debug (marketplace, github).

Установка PHP Debug

Для установки нажмите Ctrl+p и введите команду ext install php-debug . Нажмите на кнопку «включить», в итоге вы должны увидеть примерно следующее:

Установка и настройка Xdebug

PHP Debug использует для отладки Xdebug. Для настройки Xdebug пройдите по ссылке. Предполагается, что на локальной машине уже установлен и настроен сервер apache. Здесь и далее действия указаны для Windows. Можно создать файл, например, test.php содержащий:

Открыть его в браузере и скопировать содержимое страницы в диалоговое окно. Другой способ:

  • win+R ;
  • cmd + Enter ;
  • php -i > phpinfo.text ;
  • открыть любым удобным редактором phpinfo.txt и все его содержимое вставить в диалоговое окно.

Далее следуйте инструкциям по установке: скачайте .dll и не изменяя его имени скопируйте его в указанную папку, дополните файл php.ini указанной в руководстве строкой.

Кроме этого, добавьте нижеследующие строки. Итоговое добавление будет примерно таким:

Как вы уже, возможно догадались, в данном примере на локальной машине установлен XAMPP.

Обратите внимание на строку xdebug.remote_host=127.0.0.2 . По умолчанию Xdebug «слушает» порт 127.0.0.1. Укажите здесь, адрес отлаживаемого сайта.

Примечание: С версией Xdebug 2.5 и выше Visual Studio code не работает. Поэтому выбирайте соответствующий вашей версии php файл *.dll.

Настройка Visual Studio code

Вызовите панель отладки (1) и нажмите на иконку с маленькой шестеренкой (2).

В появившемся списке выберите PHP . Автоматически сформируется файл launch.json .

Настройка PHP Debug на этом окончена.

Отладка php в Visual Studio code

Откройте в браузере ваше приложение\сайт. Откройте папку с приложением в Visual Studio code. Установите в нужных файлах и строках точки остановки. Откройте панель отладки и выберите для запуска отладки команду Listen for Xdebug (1). Нажмите кнопку запуска (2).

Обновите страницу в браузере и наслаждайтесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Отладка по usb windows 10
  • Отладка запуска windows 7
  • Откуда windows 10 берет фотографии
  • Откуда windows 10 берет заставки
  • Открыть файловую систему raw в windows