Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Начало этой статьи доступно по ссылке «6 подсказок по отладке для каждого PHP-кодера»:

Известный факт: программисты тратят на отладку больше времени, чем на написание кода. Помню, когда я был новичком, я тратил уйму времени на ковыряние кода в надежде, что баги исчезнут сами собой магическим образом. Не делайте этого! Представьте, сколько времени я потерял! »»» Читать полностью

6 подсказок по отладке для каждого PHP-кодера. Часть 2

Подсказка №3: Используйте дебагер и точки останова!

Иногда баги очень хитры или сообщения об ошибках совершенно непонятны. В таких случаях точки останова — это лучший способ отладки кода, и вы должны использовать их для поиска «неуловимых» багов.

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

В установке XDebug есть свои нюансы, которые выходят за рамки этой статьи (я уже включил их в свой TODO ;) ), но общий смысл заключается в следующем:

  1. Активируйте удаленную отладку на вашем тестовом сервере с PHP.
  2. Воспользуйтесь каким-нибудь клиентом, поддерживающим удаленное соединение с XDebug.
  3. Добавляйте точки останова и наслаждайтесь дополнительной отладочной информацией!

Для включения XDebug на сервере вы должны изменить следующие настройки в php.ini:

xdebug.remote_host=192.168.???.???
xdebug.remote_port=9000

Замечание. Чтобы эти изменения заработали, вы должны перезапустить Apache или php-fpm (в случае Nginx).

Параметр xdebug.remote_host должен содержать IP-адрес компьютера, на котором вы будете отлаживать свой PHP. Настройка упростится, если ваш сервер запущен на том же компьютере, что и ваша IDE или, хотя бы, в вашей локальной сети.

Если сервер находится где-то в Интернете, велика вероятность того, что файервол или ваш роутер не разрешат соединение с ним.

В общем и целом, точки останова — это более эффективный способ нахождения хитрых багов, чем использование классического способа прямого вывода информации на ваши веб-страницы с помощью «echo» или «print».

Подсказка №4: Добавляйте в лог-файл отладочную информацию!

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

С помощью error_log вы можете писать больше данных в стандартный лог-файл ошибок. Пользуйтесь этим в трудно отслеживаемых местах кода. Например:

try {
    doStuff();
} catch (Exception $e) {
    error_log('Ошибка при выполнении doStuff()! Вот сообщение: ' . $e->getMessage());
    // дополнительные действия ... (чистка мусора, die() и т.п.)
}

С помощью метода error_log() вы можете записать лог в другой файл или отправить его на e-mail.

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

Как, например, log_message() в CodeIgniter и класс Log в Laravel.

Кроме того, вы можете использовать специальные модули/классы, такие как Monolog или KLogger.

Только будьте осторожны и не добавляйте в свой отладочный лог слишком много шума. Если в нем будет слишком много информации, вы не сможете ее использовать. Вряд-ли вам это поможет! ;)

Подсказка №5: Ошибки в песочницу!

С опытом следующая техника будет получаться у вас все лучше и лучше. Она немного похожа на игру «Жарко-холодно». Вы выбираете несколько подозрительных кусков кода и постепенно исключаете лишние в поисках одного виновного.

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

  • Соединиться с базой данных с помощью стороннего клиента (такого как MySQL Workbench) с того сервера, где неправильно выполняется PHP. Это позволит вам узнать, есть ли у сервера доступ к базе или нет.
  • Кроме того, убедитесь, что в вашем PHP-коде используются те же самые учетные данные (тот же логин, тот же пароль).
  • Попробуйте выполнить запрос непосредственно в своем SQL-клиенте, чтобы посмотреть, какие данные он возвращает.
  • Создайте и запустите маленький скрипт PHP вне окружения фреймворка.
  • Добавьте в этот скрипт простой код для соединения с базой.
  • Добавьте код, получающий информацию.
  • Проверьте информацию, получаемую из базы данных.
  • Добавьте код, который производит вычисления.

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

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

Если вы не нашли проблему в своем собственном файле PHP, попробуйте разобраться с используемым фреймворком. Может он плохо сконфигурирован? Может быть вы добавили в него что-то такое, от чего он ведет себя как сумасшедшая обезьяна?

На следующем шаге следует проверить, работает ли фреймворк с вашим кодом без всего прочего. Работает? Если да, то вам следует изучить те плагины или конфигурации вашего фреймворка, с которыми ваш код не работает.

Подсказка №6: Отладка с уткой

Перед тем, как вы назовете меня сумасшедшим, знайте, что эта техника действительно существует. Я ее не изобретал!

Короче, если вы не можете отловить проклятый баг и подумываете о том, чтобы выбросить свой компьютер в окно, объясните злосчастный код кому нибудь другому (например, коллеге) или, если вы один, резиновой утке (да, серьезно).

Просто объясняйте, что все это значит, строка за строкой. И неважно, разговариваете ли вы с другим программистом или с бездушным предметом, который ничего не смыслит в программировании.

Последовательно, строка за строкой, объясняйте вслух, что здесь делается. Это часто помогает найти, где кроется проблема. Возможно, это звучит безумно, но это работает!

Замечание. Я не пробовал с настоящей уткой, но слышал, что это тоже работает.

Заключение

Я надеюсь, что эти шесть подсказок сэкономят ваше время на отладке и сделают ее чуть приятнее! И не стесняйтесь делиться своими собственными подсказками в разделе комментариев!

Автор: mogosselin, 23.02.2014
Перевод с английского: Дмитрий Скоробогатов, специально для xBB.uz, 11.04.2014
Оригинальный текст может быть найден по адресу http://www.mogosselin.com/6-debugging-tips-php-coders-should-know/


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2014-04-11 06:42:57

Метки материала: код, отладка, php, практика программирования, кодер, программисты, баги, отладка кода, разработчики, программирование, разработка

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.