Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Уроки PHP (по материалам форума PHP.SU)
 
 

Начало. Введение.

Авторы (участники forum.php.su): Champion, при дополнении Ch_chov
Источник: forum.php.su
Обсуждение: Обсуждение уроков.


Отладка - самая важная способность программиста.


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

Представьте себе ситуацию: в туалете перегорела лампочка, вы вкручиваете новую, но светлее не становится. В темноте вы не попадаете туда, куда хотелось бы и идете искать помощи в решении проблемы в интернете. И вот на форуме, к примеру, в сообществе людей с нарушенной координацией появляется тема "Не могу попасть в унитаз! Помогите отмыть стены!". Думаете вам помогут? Нет. Потому что вы пренебрегли отладкой и не разобрались откуда растут корни проблемы.
А ведь элементарная логика подсказывает:
- координацию обеспечивают данные, поступающие с органов осязания и вестибулярный аппарат, значит надо проверить, всё ли с ними в порядке.
- выйдя на кухню и зайдя в туалет обратно, вы обнаружите, что "ага, в глаза не поступают данные!". Но глаза работают нормально: на кухне-то всё видно.
- понятно, что проблема в освещении и надо проверить систему освещения;
- убедиться в работоспособности лампочки (вкрутить ее в стопроцентно рабочий патрон);
- убедиться, что в доме есть электричество;
- убедиться в работоспособности патрона.
Допустим, электричество есть, лампочка в другом патроне загорелась - ага, не исправен патрон. Идем на форум электриков, описываем проблему и почему мы решили, что проблема в патроне. Вас все равно заставят отладить свою прогу и разобраться, когда вы будете совместными усилиями докапываться до причины проблем.

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

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

Допустим, неожиданный результат появляется на экране. Как это происходит? На экран выводится какая-то переменная (Или сообщение об ошибке, произошедшей при выполнении). Надо разобраться, из чего она формируется. Найти, какая ее часть формируется не правильно и повторить это действие для найденной части.
Всё! Ничего сложного в этом нет! Тем более, прога ваша, вам известно, где что и почему формируется, куда лучше, чем посторонним людям, у которых вы спрашиваете решения на форуме.
Если какая-то функция выдала ошибку, надо определить, правильно ли формируются ее аргументы. Точно таким же способом. Опять ничего сложного!
Если есть циклы - смотрите, правильно ли поставлено условие выхода. Выполняйте программу по шагам на проблемных тестовых данных, выводите промежуточные данные на экран.
Если работаете с БД, и неудачно выполняется запрос, выведите его на экран, посмотрите, скопируйте и выполните его - увидите в чем ошибка.
Если пишете на языках, в которых можно отключить вывод ошибок или перенаправить их куда-нибудь, включите их на время отладки.

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

И еще. Текст ошибки (или предупреждения), которые выдаются на этапе компиляции и выполнения - это не какие-то заумные термины, которые известны только мега специалистам на форумах. Это обычные фразы, понятные любому человеку, который связан с программированием. Их следует читать - они не просто так выдаются. Если они написаны на непонятном языке, их можно перевести - это тоже не так сложно. Да и в поисковиках по ним можно найти много исчерпывающей информации.

Несколько полезных настроек PHP, которые надо поменять при отладке:
- error_reporting = E_ALL - фиксироваться должны все ошибки;
- display_errors = 1 - чтобы мы видели их в браузере (или на консоли)
- убрать из кода всех @.
- помнить, что если вы в скрипте выполняете что-то такое:
ini_set('display_errors',1);
error_reporting(E_ALL);
то это не поможет, если в нём есть синтаксическая ошибка. Эти настройки должны быть сделаны с пом. php.ini или .htaccess.

Несколько ссылок на полезные инструменты для отладки PHP:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1. DumPHPer
Улучшенная замена var_dump.

2. Хакерская консоль
Отладочная консоль.

3. Krumo
Замена для print_r и var_dump и еще несколько полезных для отладки функций.

4 FirePHP
Плагин для firefox. Полезный инструмент для отладки php кода в ajax приложениях и не только.

5. Xdebug
Полноценный отладчик для PHP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
P.S. Вместо E_ALL лучше пользоватьE_ALL|E_STRICT, чтобы Ваши скрипты были совместимы с будущими версиями PHP.


 
 
 Содержание 
 Вперед >>> 

Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS