Вопросы по JS

Инструменты и техники отладки JavaScript-кода

Отладка JavaScript-кода – важный процесс, который помогает находить и исправлять ошибки, повышая стабильность приложения. Существуют различные инструменты и методы отладки, включая консольные логи, дебаггеры и профилирование производительности.


1. Использование console.log() и других методов консоли

Один из самых простых способов отладки – вывод информации в консоль браузера.

Полезные методы консоли:

console.log("Обычный лог");
console.warn("Предупреждение!");
console.error("Ошибка!");
console.table([{ name: "Alice", age: 25 }, { name: "Bob", age: 30 }]);
console.time("Время выполнения");
for (let i = 0; i < 1000000; i++) {} // Долгий процесс
console.timeEnd("Время выполнения");

Группировка логов

console.group("Детали объекта");
console.log("Имя: Alice");
console.log("Возраст: 25");
console.groupEnd();

2. Использование debugger

Ключевое слово debugger приостанавливает выполнение кода, если открыт инструментарий разработчика.

function calculateSum(a, b) {
  debugger; // Код остановится в этом месте
  return a + b;
}
calculateSum(5, 10);

Этот метод позволяет анализировать переменные в реальном времени.


3. Инструменты разработчика в браузерах

Google Chrome DevTools / Firefox DevTools / Edge DevTools

Браузеры предоставляют мощные инструменты для отладки:

Вкладка Console – просмотр логов.
Вкладка Sources – просмотр и отладка JavaScript-кода.
Вкладка Network – анализ запросов.
Вкладка Performance – измерение производительности.
Вкладка Memory – выявление утечек памяти.

Как установить точку останова вручную:

  1. Открыть DevTools (F12 или Ctrl + Shift + I).
  2. Перейти в вкладку Sources.
  3. Найти нужный файл, щелкнуть по номеру строки – появится точка останова.

4. Интерактивная отладка через console.trace()

Если необходимо узнать, откуда была вызвана функция, используйте console.trace().

function a() {
  b();
}
function b() {
  c();
}
function c() {
  console.trace("Трассировка вызовов:");
}
a();

Этот метод поможет понять, как код дошел до конкретной точки.


5. Анализ сетевых запросов

Для отладки fetch() или XHR-запросов:

  1. Откройте DevTools → вкладка Network.
  2. Фильтруйте запросы по типу XHR или Fetch/XHR.
  3. Анализируйте заголовки, тело запроса и ответ.

Пример отладки запроса:

fetch("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error("Ошибка запроса:", error));

6. Отладка асинхронного кода

При работе с async/await ошибки могут быть незаметными. Лучше использовать try...catch или unhandledrejection.

async function fetchData() {
  try {
    let response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error("Ошибка при загрузке:", error);
  }
}

fetchData();

Для перехвата необработанных ошибок:

window.addEventListener("unhandledrejection", (event) => {
  console.error("Необработанная ошибка:", event.reason);
});

7. Инструменты профилирования и анализа производительности

Если приложение работает медленно, можно использовать:

1. console.time() и performance.now()

console.time("Тест");
for (let i = 0; i < 1000000; i++) {}
console.timeEnd("Тест");

let start = performance.now();
for (let i = 0; i < 1000000; i++) {}
console.log("Время выполнения:", performance.now() - start, "мс");

2. Вкладка Performance в DevTools

  1. Откройте DevTools → вкладка Performance.
  2. Нажмите Start Profiling и выполните действие.
  3. Проанализируйте нагрузку на CPU и задержки.

3. Вкладка Memory – выявление утечек памяти

Проверяет, не накапливаются ли объекты, не удаляемые сборщиком мусора.


8. Инструменты для тестирования кода

Jest – тестирование функций и модулей.
Cypress – тестирование пользовательских сценариев в браузере.
Mocha + Chai – тестирование с удобным API.

Пример теста с Jest:

test("Сложение чисел", () => {
  expect(2 + 2).toBe(4);
});

Заключение

Отладка JavaScript-кода требует комплексного подхода. Используйте консольные логи, debugger, DevTools, сетевой анализ и тестирование. Это поможет быстрее находить и устранять ошибки.