BLACK FRIDAY

осталось 2 дня

Скидка 10% и подарок на выбор — при покупке одной программы
При покупке двух программ  — вторая со скидкой 50%

Что такое трассировка стека?

Ответы
Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
14 июня 2022

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

const func1 = () => {
  throw Error('func1 error!');
};

const func2 = () => {
  func1();
};

const func3 = () => {
  func2();
};

try {
  func3();
} catch (e) {
  console.log(e);
}
// Вывод будет следующим (вместо anonymous будет имя файла с кодом, я запускал в консоли браузера)
// Error: func1 error!
//    at func1 (<anonymous>:3:9)
//    at func2 (<anonymous>:8:3)
//    at func3 (<anonymous>:13:3)
//    at <anonymous>:17:3

В коде у нас три функции, каждая из которых вызывает другую, последняя (func1) внутри выбрасывает ошибку. Получается такая цепочка вызовов: func3 -> func2 -> func1. Внутри блока try catch мы поймали ошибку и распечатали. По ней видно, что текст ошибки содержит не только то значение, переданное в Error(), но и имена функций, номера строк и позиций в строках, в которых была выброшена ошибка. Это и есть трассировка стека. По нему можно понять, что ошибка была внутри функции func1(), строка 3, позиция 9. Эта функция была вызвана внутри функции func2(), строка 8, позиция 3. Функция 2 была вызвана внутри func3(), строка 13, позиция 3. А функция func3() была вызвана на строке 17, позиция 3. Позиция указывает на номер символа (с которого начинается имя функции) с начала строки.

Аватар пользователя Карен Асатрян
Карен Асатрян
15 ноября 2022

Иван, спасибо за такие доходчивые разъяснения!!!

Добавьте ваш ответ

Рекомендуемые курсы

Алгоритмы сортировки
Структуры данных
Бинарный поиск
Жадные алгоритмы
10 часов
Посмотреть
модули
импорты
отладка программы
ошибки
50 часов
Посмотреть
полифиллы
AJAX
события
селекторы
20 часов
Посмотреть