php Отладка программ -- как быстрее находить ошибки в коде

Здесь мы соберём общие советы о том, как эффективнее искать ошибки в программном коде

Белый экран

  1. Включаем на входе в наш скрипт режим отображения ошибок:
    error_reporting(E_ALL);
    ini_set('display_errors', 'on');

С чего начинать отладку

  1. Проверь, пишутся ли данные напрямую, без методов. Если да, то ошибка в названии/вызове/наличии метода/объекта
  2. Если класс не выделяется IDE, нечто подчёркивается как ошибка или нельзя перейти к описанию класса/метода/переменной - это не всегда значит, что код неверный. Если очевидных опечаток/ ошибок нет, проверь на практике, работает ли программа как ожидается. Некорректность IDE возможна при работе с новыми версиями языка.
  3. В месте, где программа ещё работает, вставляем die(). Если ошибка не выводится на экран, значит, она в более поздней строке.
    Переносим die() через строку, и таким образом доходим до строки, когда ошибка уже появляется в окне браузера. Далее ищем ошибку в этой строке.
  4. Ещё способ рабты с die(): после объявления/изменения переменной, которую надо проверить (всё равно, в каком методе), вставляем echo "переменная". А после die(). Способ хорош, чтобы проверять, есть ли данные в переменной

Работа с данными

  1. UNDEFINED - Если какая-то переменная не определяется, первым делом проверь, нет ли опечатки в названии переменной
  2. Нет данных в переменной/объекте/массиве (даже в \$_POST или \$_GET)
    • Возможна утеря данных при редиректе (из post и get). Решение: передать данные в скрытых полях формы(hidden)
    • Обращаться к св-вам singleton-а можно только если в конструкторе прописано их обновление. Иначе св-во будет пустым, т.к. объект каждый раз новый Class::get()->property
  3. "Маршрут не найден", No route found for "GET /" (в Symfony) или что-то в этом роде.
    • Если настройка роутинга в проекте верна, попробуйте очистить кэш. В Symfony c помощью консольной команды:

      php bin/console cache:clear

    • Также ошибка может возникать, если путь, который вы указали, не уникален, т.е. по этому пути есть больше одного метода, которые могут запуститься. Переименуйте один из них.
  4. Не все данные записываются в массив / Перезапись данных в массиве. Возможно дело в неверном расположении объявления массива.

Ошибки в MySQL

  1. Для начала необходимо смотреть, какой именно запрос был передан скриптом базе. Для этого заходим в файл логгирования sql-запросов /var/log/mysql/query.log
    Возможно сначала придётся скорректировать конфигурационный файл. Можно сделать так.

Ошибки в JavaScript/jQuery

  1. Не привязывается действие к элементу, загруженному ajax-ом. Всё просто, надо привязывать "живым" способом
  2. Если действие привязывается к кнопке Submit, не забудьте отвязать от неё действие по умолчанию, т.е. отправку данных формы контроллеру. Иначе возникает пустая страница, т.к в контроллер пришли неожидаемые данные.

Отладка в браузере

  1. Нажимаем F12, перезагружаем страницу - F5
  2. Вкладка Network - сведения о загрузке скриптов. Щёлкнув по каждому, можно справа увидеть подробности. В случае ошибки, её номер будет выведен в левой колонке.
  3. Подвкладка XHR во вкладке Network отвечает за ajax

Что почитать ещё

  • Ещё о способах отладки программы можно почитать здесь: http://phpfaq.ru/debug
vedro-compota's picture

это специфичная для PHP заметка-солянка) её надо перенести куда-то из словаря программистов. Тут же "общая" теория и понятия.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

Про отладку непосредственно php-кода читайте здесь: http://fkn.ktu10.com/?q=node/7248

_____________
матфак вгу и остальная классика =)