Чтение 6 минут

Как искать ошибки в коде: практика отладки


Как искать ошибки в коде: практика отладки - Студия Вебтую

Отладка занимает заметную часть рабочего времени, но её редко разбирают как навык: считается, что умение искать ошибки приходит само. На практике разница между «полдня ловил ошибку» и «нашёл за двадцать минут» почти всегда в методе, а не в стаже. Ниже — порядок, которым мы пользуемся на поддержке чужих проектов, где кода много, документации нет, а автор недоступен.

Порядок, который экономит время

  1. Воспроизвести. Пока ошибка не повторяется по шагам, её нельзя проверить исправленной. Любое «вроде починили» без воспроизведения — догадка.
  2. Сузить область. Отключать по половине: данные, участок кода, окружение. Каждый шаг вдвое уменьшает поле поиска.
  3. Сформулировать гипотезу. «Похоже, приходит пустой массив» — проверяемо. «Что-то с базой» — нет.
  4. Проверить одним изменением. Меняя три вещи разом, вы не узнаете, что помогло.
  5. Понять причину. Ошибка, исчезнувшая сама, обычно возвращается в худший момент.

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

Как воспроизвести ошибку

Сообщение «форма не работает» непригодно для работы. Мы уточняем пять вещей: что делал человек, что ожидал увидеть, что увидел, где именно (адрес страницы) и когда. К этому добавляем окружение: браузер, устройство, роль пользователя, был ли он авторизован.

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

Когда шаги найдены, записываем их сразу. Через час детали забываются, а именно они потом становятся сценарием проверки после исправления.

Сужение области: бинарный поиск

Приём простой и работает почти всегда: разделить систему пополам и понять, в какой половине проблема. Поиск ведём по трём осям.

По коду. Проверяем, доходит ли выполнение до нужного места и с какими данными. Убеждаемся, что цикл вообще запускается, а условие срабатывает. Одна проверка в середине подозрительного участка отсекает половину.

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

По истории изменений. Если раньше работало, ищем коммит, после которого перестало. Половинное деление по истории даёт ответ за несколько шагов даже на большом репозитории; в системах контроля версий для этого есть готовая команда. Найденный коммит редко содержит ошибку сам по себе, но показывает область.

Чем смотреть

ИнструментЧто показываетКогда полезен
Консоль браузераОшибки скриптов, предупрежденияЛюбая проблема на фронтенде
Вкладка «Сеть»Запросы, коды ответов, тело ответаФорма не отправляется, данные не приходят
Логи сервераОшибки бэкенда, трассировкуПятисотые ошибки, сбои обмена
Отладчик с точками остановаЗначения переменных по шагамСложная логика, неочевидные условия
Логи в кодеХод выполнения на боевом сервереОшибка не воспроизводится локально
Лог запросов к базеСами запросы и время их работыСтраница открывается медленно, данные не те
Система сбора ошибокОшибки у реальных пользователей с контекстомЖалобы есть, а воспроизвести не удаётся

Порядок обращения обычно такой: консоль и вкладка «Сеть» отвечают на вопрос, на чьей стороне проблема, дальше подключаются логи сервера, и только затем отладчик — он точнее, но требует времени на подготовку.

Фронтенд и бэкенд: где искать

Прежде чем углубляться, определяем сторону. Открываем вкладку «Сеть» и смотрим на запрос: если он вообще не ушёл — ошибка на фронтенде, скорее всего в скрипте, который прервался раньше отправки. Если ушёл и вернулся с ошибочным кодом — смотрим логи сервера. Если вернулся успешно, но с не теми данными — проблема в бэкенде, но не в падении, а в логике или в самих данных. Если ответ верный, а на странице неправильно — вопрос к отрисовке. Эта проверка занимает минуту и избавляет от самой дорогой ошибки отладки — поисков в той половине системы, где проблемы нет.

Как читать стек-трейс

Трассировку часто пролистывают, хотя в ней обычно есть прямой ответ. Читать её стоит так:

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

Если сообщение неинформативно, добавляем в него контекст: идентификатор записи, входные параметры, имя пользователя. Такая запись в логе экономит следующий разбор.

Ошибка «только на проде»

Самый частый класс задач на поддержке. Проверять стоит по короткому списку:

  • Другая версия языка, расширений или библиотек.
  • Другие настройки окружения: переменные, лимиты памяти и времени выполнения, размер загружаемого файла.
  • Реальные данные с неожиданными значениями: пустые поля, дубли, длинные строки, старые записи.
  • Кэш — страниц, шаблонов, скомпилированного кода, ответов внешних сервисов.
  • Права доступа к файлам и каталогам, особенно после выкладки.
  • Часовой пояс и кодировка сервера.
  • Внешние сервисы: платёжный шлюз или почтовый сервис отвечают в боевом режиме иначе, чем в тестовом.

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

Плавающие ошибки и данные

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

Отдельная категория — ошибки, которые вызывает не код, а данные. Код написан для нормального случая, а в базе оказывается запись без обязательного поля, товар с нулевой ценой, заказ, ссылающийся на удалённого клиента. Признак такой ошибки характерный: сбой воспроизводится только на конкретных записях. Поэтому первым делом мы смотрим не на код, а на те самые данные, с которыми он падает.

Что делать после исправления

  1. Пройти записанный сценарий воспроизведения и убедиться, что ошибки больше нет.
  2. Проверить соседнее поведение: правка условия часто чинит один случай и ломает другой.
  3. Добавить автоматическую проверку на этот случай, чтобы ошибка не вернулась незамеченной.
  4. Записать в задаче причину, а не только факт исправления. Через полгода это единственный источник знания о том, почему код выглядит так.
  5. Проверить, нет ли той же ошибки в других местах: одинаковый шаблон кода обычно повторяется.

Пара привычек, которые заметно сокращают время: не чинить наугад — случайная правка часто прячет симптом, оставляя причину; и если через час нет продвижения, сделать паузу или пересказать проблему коллеге. Формулировка вслух решает задачу удивительно часто.

Возьмём поиск ошибок на себя

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

Нужна помощь с сайтом?

Срочные ошибки исправим за 24 часа, работа от 2 500 руб./час.

Техническая поддержка и сопровождение сайта

По теме статьи

Мы это уже делали

Похожие статьи

Нужен новый сайт?

Оставьте контакты — вернёмся с вопросами по задаче и ориентиром по срокам и стоимости.

Читайте также

Разбираем задачи, с которыми к нам приходят: от структуры сайта до поддержки и продвижения.

Внимание: мошенники представляются сотрудниками Вебтую Внимание: мошенники представляются сотрудниками Вебтую Посторонние люди обращаются к рекламным агентствам и исполнителям от имени Вебтую через Telegram-аккаунты @vetaroki22010 и @WhatSua2202, заказывают работы и не 10-09-2026 Читать Работа в digital: процессы, инструменты и команда Работа в digital: процессы, инструменты и команда Цифровые проекты редко проваливаются из-за технологий: чаще мешает организация работы. Разбираем этапы, роли, постановку задач, инструменты распределённой коман 30-08-2026 Читать Реклама и аналитика: как считать заявки, а не клики Реклама и аналитика: как считать заявки, а не клики Показы и клики не отвечают на вопрос, сколько принесла реклама. Разбираем, как настроить цели, разметить источники, учесть звонки и связать заявку со сделкой, ч 30-08-2026 Читать Поддержка сайта: обновления, резервные копии и безопасность Поддержка сайта: обновления, резервные копии и безопасность Сайт без регулярного обслуживания ломается предсказуемо. Разбираем, из чего состоит поддержка: обновления, резервные копии, доступы, безопасность, выбор хостинг 30-08-2026 Читать Техническое SEO: индексация, скорость и структура сайта Техническое SEO: индексация, скорость и структура сайта Техническая часть сайта решает, попадут ли страницы в индекс и дождётся ли их посетитель. Разбираем структуру и адреса, индексацию и дубли, работу с устаревшими 30-08-2026 Читать Продвижение сайта в поиске: стратегия, семантика и ссылки Продвижение сайта в поиске: стратегия, семантика и ссылки Разбираем продвижение сайта в поиске от постановки цели до регулярной работы: как собрать и разложить семантику по страницам, что должно быть на посадочной стра 30-08-2026 Читать Тексты для сайта: как писать, чтобы читали и покупали Тексты для сайта: как писать, чтобы читали и покупали Как выбрать тему для страницы и построить текст, который просматривают глазами и дочитывают, чем заменить оценочные формулировки, как переработать существующую 30-08-2026 Читать Автоматизация бизнеса: CRM, ERP и искусственный интеллект Автоматизация бизнеса: CRM, ERP и искусственный интеллект С чего начинать автоматизацию и что автоматизировать в первую очередь, чем различаются CRM, ERP и системы документооборота, внедрять по модулям или всё сразу, г 30-08-2026 Читать Как устроена разработка: технологии, тестирование и инструменты Как устроена разработка: технологии, тестирование и инструменты Из чего состоит веб-проект, как выбирают язык, фреймворк и базу данных, зачем нужны тестирование и контроль версий, где заканчиваются возможности low-code и ген 30-08-2026 Читать Создание сайта: от технического задания до запуска Создание сайта: от технического задания до запуска Проекты срываются не из-за технологий, а из-за неясных договорённостей. Разбираем весь путь создания сайта: как сформулировать цель, что должно быть в техническ 30-08-2026 Читать
Обсудить проект