> Как отлаживать ошибки в коде (JavaScript)
Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: ЭНИРАН
Стек: Node.js, JavaScript
> Пример ответа
Короткий ответ
Отладка ошибок в JavaScript/Node.js начинается с чтения stack trace и использования console.log или debugger. Для сложных случаев применяю Chrome DevTools, VS Code debugger, а для Node.js - --inspect флаг. Важно воспроизвести ошибку изолированно, проверить типы данных и асинхронные цепочки. Использую source maps для продакшена, логирование через Winston/Sentry и unit-тесты для регрессии.
Подробное объяснение
Процесс отладки включает несколько этапов. Сначала анализирую сообщение об ошибке и stack trace - это даёт строку кода и последовательность вызовов. Затем воспроизвожу ошибку в контролируемой среде, часто с минимальным набором данных. Для frontend использую breakpoints в Chrome DevTools: conditional breakpoints, watch expressions, call stack. Для Node.js запускаю с node --inspect-brk и подключаюсь через Chrome DevTools или использую встроенный debugger в VS Code.
Асинхронные ошибки - отдельная сложность. В промисах всегда добавляю .catch() или использую try/catch с async/await. Для event emitters слушаю uncaughtException и unhandledRejection. В продакшене подключаю Sentry или аналоги для сбора ошибок с контекстом (user agent, actions, state). Source maps позволяют видеть оригинальный код, а не минифицированный.
Для трудноуловимых багов применяю:
console.trace()для трассировки вызововperformance.mark()иperformance.measure()для замеров- логирование с уровнями (debug, info, error) через Winston
- unit-тесты на граничные случаи
На практике
Начинаю с воспроизведения: открываю консоль браузера или терминал, смотрю точное сообщение. Если ошибка в UI, проверяю React DevTools или Vue DevTools для состояния компонентов. Для Node.js API - использую Postman или curl с теми же заголовками.
Типичный сценарий: ошибка "Cannot read property of undefined". Смотрю stack trace, нахожу строку, ставлю breakpoint на несколько строк выше. Проверяю, что приходит в функцию, через console.log или watch. Если асинхронно - проверяю, не потерялся ли контекст (this) или не undefined ли ответ от сервера.
Для сетевых ошибок в браузере открываю вкладку Network, смотрю статусы и тело ответа. В Node.js - логирую request/response через middleware (например, morgan). Если баг связан с race condition, добавляю логи с таймстемпами.
Пример кода
JAVASCRIPT// Пример отладки асинхронной ошибки в Node.jsasync function fetchUserData(userId) {try {const response = await fetch(`/api/users/${userId}`);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const data = await response.json();return data;} catch (error) {console.error('fetchUserData failed:', error.message);console.trace('Stack trace:');// Логируем в SentrySentry.captureException(error, { extra: { userId } });throw error; // или возвращаем fallback}}// Использование debugger в VS Codefunction processItems(items) {debugger; // breakpointconst result = items.map(item => {// conditional breakpoint: item.id === 42return transform(item);});return result;}
Как отвечать на собеседовании
Покажите системный подход: не просто "ставлю console.log", а описываете процесс от начала (чтение ошибки) до конца (фикс и тест). Упомяните инструменты: Chrome DevTools, VS Code debugger, Sentry, source maps. Для senior важно рассказать про отладку в production: feature flags, логирование с контекстом, A/B тесты для проверки фикса.
Акцентируйте внимание на асинхронных ошибках и race conditions - это частая проблема. Приведите пример, как вы отлаживали баг с гонкой данных. Покажите, что умеете не только фиксить, но и предотвращать ошибки через типизацию (TypeScript), линтеры и code review.
Что проверяет интервьюер
- Умение читать stack trace и понимать поток выполнения
- Знание инструментов отладки для frontend и Node.js
- Понимание асинхронности и обработки ошибок в промисах/callbacks
- Навыки работы с production-логированием и мониторингом
- Способность воспроизводить и изолировать сложные баги
- Понимание разницы между dev и prod отладкой
Типичные ошибки
- Игнорирование stack trace и попытки угадать причину
- Использование только
console.logбез breakpoints и watch - Забывание про source maps в production - ошибки указывают на минифицированный код
- Неправильная обработка асинхронных ошибок: отсутствие
.catch()илиtry/catch - Отладка в production без изоляции - можно сломать пользователям
- Слишком много логов, которые засоряют консоль и замедляют приложение
- Не учитывать race conditions при параллельных запросах
> Похожие задачи по JavaScript
Как распределялось время между фронтендом и бэкендом в работе
Что такое хэш индекс и как он работает
Как реализовать rate limiting с использованием Redis
Как спроектировать и реализовать rate limiting для платного API с разными тарифами
> Похожие задачи по frontend
Какой опыт с библиотеками для работы с API, например Axios?
Что такое хэш индекс и как он работает
Как реализовать rate limiting с использованием Redis
Как спроектировать и реализовать rate limiting для платного API с разными тарифами
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью