Читаем сообщения об ошибках и стектрейсы

Сообщение об ошибке — это не наказание, а инструкция по починке. Большинство ошибок прямо говорят, что не так, если уметь их читать.

The error message is your friend. — каждый сеньор хоть раз

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

Анатомия типичной ошибки

TypeError: Cannot read property 'name' of undefined
    at getUser (app.js:42:15)
    at main (app.js:10:3)

Разбор:
  TypeError                      — тип ошибки (ошибка типа)
  Cannot read property 'name'    — не может прочитать поле 'name'
  of undefined                   — у значения undefined (его нет)
  at getUser (app.js:42:15)      — где: функция getUser, файл, строка 42
  at main                        — кто вызвал: функция main

Вывод: в getUser обращаемся к .name у того, чего нет.

Ключевые слова в ошибках

Слово / фразаПереводОбычно значит
unexpectedнеожиданныйсинтаксис не там, где парсер ждал
undefined / nullне определено / пустообращение к несуществующему
is not a functionне является функциейвызываешь то, что не вызывается
not foundне найденофайл/модуль/ресурс отсутствует
permission deniedдоступ запрещённе хватает прав
connection refusedсоединение отклоненосервис недоступен/не запущен
timeout / timed outпревышено время ожиданияответ не пришёл вовремя
out of memoryнехватка памятипроцесс съел всю память
out of boundsвыход за границыиндекс вне массива
already in useуже используетсяпорт/ресурс занят

Типы исключений

ExceptionПереводПричина
SyntaxErrorсинтаксическая ошибкакод написан неправильно
TypeErrorошибка типаоперация над неподходящим типом
ValueErrorошибка значенияверный тип, но неверное значение
NullPointerExceptionобращение к nullработа с пустой ссылкой (Java)
IndexErrorошибка индексаиндекс за пределами коллекции
KeyErrorошибка ключанет такого ключа в словаре

Полезные фразы

I'm getting a "connection refused" error.   — Получаю ошибку «соединение отклонено».
The stack trace points to line 42.          — Стектрейс указывает на строку 42.
It throws a TypeError on undefined.          — Кидает TypeError на undefined.
The error is misleading, the real cause is…  — Ошибка вводит в заблуждение, реальная причина…

Частые ошибки рус-говорящих

  • Паниковать при виде стектрейса. Читай сверху вниз: первая строка — что, остальные — откуда. Своя самая верхняя строка из твоего кода — главная зацепка.
  • Путать «undefined» и «null». undefined — значение не задавалось; null — намеренно пусто. Обе ведут к ошибкам при обращении к полям.
  • Гуглить ошибку целиком с путями и числами. Убери из текста свои имена файлов, строки и id — гугли обобщённую формулировку.

Практика

  • Найди в своём проекте любую недавнюю ошибку и разбери её по схеме «что / где / почему».
  • Выпиши из таблицы 5 ключевых слов, которые встречал в реальных логах.
  • Попробуй сформулировать причину ошибки одной фразой на английском.

Слова из логов и предупреждений

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

СловоПереводНасколько серьёзно
INFOинформациянорма, просто событие
WARN / WARNINGпредупреждениестоит заметить, но не авария
ERRORошибкачто-то сломалось
FATAL / CRITICALкритическаявсё упало, срочно
DEBUG / TRACEотладочноедетали для разбора
staleустаревшее, протухшееданные/кеш неактуальны
pendingв ожиданииещё не завершилось

Полезный приём: ищи в ошибке слова expected и got (или actual). Формулировка «expected X but got Y» — подарок: она прямо называет, что система ждала и что получила. «Expected a string but got undefined» означает, что куда-то прилетел undefined вместо строки — и ты сразу знаешь, что искать.

Ключевые слова ошибок

КлючСмыслГде встречается
undefined / nullнет значенияобращение к пустому
not foundне найденофайл/модуль отсутствует
refused / timeoutотклонено / таймаутсервис недоступен
expected … got …ждал … получил …прямая подсказка

Читай стектрейс сверху вниз, ищи свою верхнюю строку и формулировку «expected/got» — она почти всегда называет проблему прямо.

Итоги

Ошибка — это инструкция: тип, сообщение и место почти всегда называют проблему напрямую. Английский в ошибках шаблонный, ключевые слова (undefined, not found, refused, timeout, out of bounds) повторяются. Читай стектрейс сверху вниз, ищи свою верхнюю строку и гугли обобщённую формулировку без личных путей и чисел.

Проверьте себя
1. Что означает ошибка «Cannot read property 'name' of undefined»?
AСвойство name защищено от чтения
BПытаемся прочитать поле name у значения, которого нет (undefined)
CИмя переменной неверное
DСервер вернул пустой ответ
2. В каком порядке стоит читать стектрейс, чтобы найти причину?
AСнизу вверх, начиная с системных вызовов
BСверху вниз: первая строка — что произошло, дальше — откуда, ищи свою верхнюю строку
CТолько последнюю строку
DСлучайным образом