Всё ещё отлаживаете PHP по-старинке? Рассказываем про инструмент, которым пользуются современные PHP-программисты. Этот инструмент – Xdebug.
Конечно, можно отлаживать PHP-код используя простые функции вроде error_log, print_r и var_dump, но они не позволяют отслеживать процесс работы кода. Для этого PHP-разработчики используют Xdebug. В данной статье рассказываем, почему это удобно, как использовать и облегчить процесс отладки.
Как Xdebug меняет жизни разработчиков
Многие из тех, кто не знаком с Xdebug, используют для отладки функцию, которую часто упоминают на Stack Overflow:
if ( ! function_exists( '_log' ) ) { function _log( $message ) { if ( WP_DEBUG === true ) { if ( is_array( $message ) || is_object( $message ) ) { error_log( print_r( $message, true ) ); } else { error_log( $message ); } } } }
Когда вы отлаживаете с использованием error_log, не всегда выводятся те переменные, которые требуются. Например, в процессе устранения ошибок вы добавляете функцию для отладки переменной, обновляете страницу, проверяете лог ошибок. Если установить, в чём ошибка, не удается, приходится повторять процесс снова и снова.
Xdebug позволяет останавливать процесс во время его исполнения и проверять переменные. Это означает, что у вас есть все необходимое для устранения неполадок во время одной итерации этого цикла. Такая функция помогает сделать процесс разработки более эффективным.
Устранение проблем с использованием Xdebug
Брейкпоинты Xdebug позволяют останавливать исполнение кода в любой момент. Это значит, что можно перемещать брейкпоинты, пока не обнаружится область, откуда исходит проблема.
Разработка через тестирование
Еще одна область применения Xdebug – Debug Driven Development, позволяющая быстро решать проблемы. Вот как это можно делать через Xdebug:
- Проверьте существующие массивы, объекты и экземпляры классов, чтобы найти фрагменты кода, которые можно использовать несколько раз.
- Отлаживайте новые фрагменты и проверяйте, нет ли ошибок.
Это необязательно использовать часто, но сам факт наличия такой функции уже радует.
Установка Xdebug
Даже если преимущества не кажутся существенными, попробовать Xdebug точно стоит. Вот несколько самых распространённых сред:
Интеграция с PHPStorm
Многим нравится PhpStorm. У него есть интеграция с Xdеbug, и настроить их совместную работу достаточно просто. Но есть и другие редакторы и интегрированные среды разработки (IDE) с поддержкой Xdebug.
Начало отладки
После установки и настройки интеграций можно начинать отладку кода. Это делается путем установки брейкпоинтов на определенных строках вашего кода и указания PHPStorm начать отслеживать входящую информацию. Когда PHP начнёт выполнять строку с брейкпоинтом, Xdebug включится в работу и позволит узнавать подробности в процессе выполнения.
На боковой панели отладки имеются различные кнопки для управления исполнением кода (иконки слева). Вот как они работают:
- Resume Program – продолжение выполнения PHP-кода.
- Pause Program – недоступна во время отладки.
- Stop – остановка выполнения.
- View Breakpoints – открытие списка брейкпоинтов всего проекта.
- Mute Breakpoints – отключение брейкпоинтов в процессе выполнения (полезно, если проблема уже найдена, а процесс ещё не закончен).
- Restore Layout – сброс настроек панели отладки.
- Settings – настройка отображения отладчика.
- Pin Tab – всегда показывает панель отладки.
- Close – закрытие панели, возможность отключения соединения или полного завершения.
- Help – справки по работе панели от JetBrains.
Верхняя панель управляет тем, как происходит отладка кода:
- Show Execution Point – переход к ошибке.
- Step Over – выполнение и переход к следующей строке.
- Step Into – если в следующей строке есть одна или несколько функций, отладчик приступит к следующим функциям в строке.
- Force Step Into – переход к функции, отмеченной как пропущенная.
- Step Out – отправка отладчика к функции вызова.
- Run to Cursor – исполнения до момента, где находится курсор мышки.
- Evaluate Expression – выполнение PHP-кода во время работы отладчика.
- Show Values Addresses – отображение адреса памяти объектов.
- Hide Empty Superglobals Variables – удаление лишнего из списка переменных.
- Add Method to Skip List – отмечает метод, который будет пропущен в следующий раз.
PhpStorm позволяет добавлять переменные в список, который отображается на панели «Watches». Вы можете просмотреть переменную, щелкнув правой кнопкой мыши по её файлу в процессе отладки и выбрав «Add to Watches», либо сделав то же самое на панели «Variables».
Трассировка стека
Включение Xdebug дает вам по умолчанию расширенную трассировку стека для любых ошибок, уведомлений или предупреждений, которые записываются в журнал PHP:
[26-Jul-2017 16:06:21 UTC] PHP Notice: Trying to get property of non-object in /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/functions.php on line 302 [26-Jul-2017 16:06:21 UTC] PHP Stack trace: [26-Jul-2017 16:06:21 UTC] PHP 1. {main}() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/index.php:0 [26-Jul-2017 16:06:21 UTC] PHP 2. require() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/index.php:3 [26-Jul-2017 16:06:21 UTC] PHP 3. require_once() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-blog-header.php:19 [26-Jul-2017 16:06:21 UTC] PHP 4. include() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/template-loader.php:74 [26-Jul-2017 16:06:21 UTC] PHP 5. get_header($name = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/404.php:2 [26-Jul-2017 16:06:21 UTC] PHP 6. locate_template($template_names = *uninitialized*, $load = *uninitialized*, $require_once = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/general-template.php:45 [26-Jul-2017 16:06:21 UTC] PHP 7. load_template($_template_file = *uninitialized*, $require_once = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/template.php:647 [26-Jul-2017 16:06:21 UTC] PHP 8. require_once() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/template.php:688 [26-Jul-2017 16:06:21 UTC] PHP 9. do_action($tag = *uninitialized*, $arg = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/header.php:27 [26-Jul-2017 16:06:21 UTC] PHP 10. WP_Hook->do_action($args = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/plugin.php:453 [26-Jul-2017 16:06:21 UTC] PHP 11. WP_Hook->apply_filters($value = *uninitialized*, $args = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/class-wp-hook.php:323 [26-Jul-2017 16:06:21 UTC] PHP 12. dbi_theme_body(*uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/wp/wp-includes/class-wp-hook.php:298 [26-Jul-2017 16:06:21 UTC] PHP 13. dbi_theme_render_part($part = *uninitialized*, $args = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/functions.php:137 [26-Jul-2017 16:06:21 UTC] PHP 14. include() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/functions.php:11 [26-Jul-2017 16:06:21 UTC] PHP 15. dbi_theme_is_products_page() /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/parts/nav/nav.php:15 [26-Jul-2017 16:06:21 UTC] PHP 16. dbi_theme_is_product_page($product = *uninitialized*) /Applications/MAMP/htdocs/deliciousbrains.com/public_html/content/themes/deliciousbrains/functions.php:315
Расширенная трассировка стека полезна сама по себе, но вместе с PhpStorm можно посмотреть интерактивную историю того, какой код был выполнен до брейкпоинта или текущей точки выполнения.
Заключение
Используя Xdebug, можно неплохо сэкономить время. Многие даже не могут представить жизнь без этого инструмента.
Если вы знаете ещё более крутой отладчик или можете рассказать о классных вещах, которые помог вам сделать Xdebug, пишите в комментариях.
Понравилась статья? Посмотрите нашу подборку материалов по PHP 7.
Источник: Deliciousbrains
Комментарии