php Отладка программ -- как быстрее находить ошибки в коде
Primary tabs
Forums:
Здесь мы соберём общие советы о том, как эффективнее искать ошибки в программном коде
Белый экран
- Включаем на входе в наш скрипт режим отображения ошибок:
error_reporting(E_ALL); ini_set('display_errors', 'on');
С чего начинать отладку
- Проверь, пишутся ли данные напрямую, без методов. Если да, то ошибка в названии/вызове/наличии метода/объекта
- Если класс не выделяется IDE, нечто подчёркивается как ошибка или нельзя перейти к описанию класса/метода/переменной - это не всегда значит, что код неверный. Если очевидных опечаток/ ошибок нет, проверь на практике, работает ли программа как ожидается. Некорректность IDE возможна при работе с новыми версиями языка.
- В месте, где программа ещё работает, вставляем die(). Если ошибка не выводится на экран, значит, она в более поздней строке.
Переносим die() через строку, и таким образом доходим до строки, когда ошибка уже появляется в окне браузера. Далее ищем ошибку в этой строке. - Ещё способ рабты с die(): после объявления/изменения переменной, которую надо проверить (всё равно, в каком методе), вставляем echo "переменная". А после die(). Способ хорош, чтобы проверять, есть ли данные в переменной
Работа с данными
- UNDEFINED - Если какая-то переменная не определяется, первым делом проверь, нет ли опечатки в названии переменной
- Нет данных в переменной/объекте/массиве (даже в \$_POST или \$_GET)
- Возможна утеря данных при редиректе (из post и get). Решение: передать данные в скрытых полях формы(hidden)
- Обращаться к св-вам singleton-а можно только если в конструкторе прописано их обновление. Иначе св-во будет пустым, т.к. объект каждый раз новый Class::get()->property
- "Маршрут не найден", No route found for "GET /" (в Symfony) или что-то в этом роде.
- Если настройка роутинга в проекте верна, попробуйте очистить кэш. В Symfony c помощью консольной команды:
php bin/console cache:clear
- Также ошибка может возникать, если путь, который вы указали, не уникален, т.е. по этому пути есть больше одного метода, которые могут запуститься. Переименуйте один из них.
- Если настройка роутинга в проекте верна, попробуйте очистить кэш. В Symfony c помощью консольной команды:
- Не все данные записываются в массив / Перезапись данных в массиве. Возможно дело в неверном расположении объявления массива.
Ошибки в MySQL
- Для начала необходимо смотреть, какой именно запрос был передан скриптом базе. Для этого заходим в файл логгирования sql-запросов /var/log/mysql/query.log
Возможно сначала придётся скорректировать конфигурационный файл. Можно сделать так.
Ошибки в JavaScript/jQuery
- Не привязывается действие к элементу, загруженному ajax-ом. Всё просто, надо привязывать "живым" способом
- Если действие привязывается к кнопке Submit, не забудьте отвязать от неё действие по умолчанию, т.е. отправку данных формы контроллеру. Иначе возникает пустая страница, т.к в контроллер пришли неожидаемые данные.
Отладка в браузере
- Нажимаем F12, перезагружаем страницу - F5
- Вкладка Network - сведения о загрузке скриптов. Щёлкнув по каждому, можно справа увидеть подробности. В случае ошибки, её номер будет выведен в левой колонке.
- Подвкладка XHR во вкладке Network отвечает за ajax
Что почитать ещё
- Ещё о способах отладки программы можно почитать здесь: http://phpfaq.ru/debug
- Log in to post comments
- 4409 reads
vedro-compota
Mon, 02/26/2018 - 15:46
Permalink
это специфичная для PHP
это специфичная для PHP заметка-солянка) её надо перенести куда-то из словаря программистов. Тут же "общая" теория и понятия.
_____________
матфак вгу и остальная классика =)
vedro-compota
Sun, 08/26/2018 - 11:24
Permalink
Про отладку непосредственно
Про отладку непосредственно php-кода читайте здесь: http://fkn.ktu10.com/?q=node/7248
_____________
матфак вгу и остальная классика =)