Что такое…

Что такое stack trace — и как найти строку, которая всё сломала

Иллюстрация: в стопке вызовов подсвечена одна строка-виновник

Ты запускаешь код, и вместо результата вываливается простыня красного текста на пол-экрана. Первая реакция — паника и желание скопировать это целиком куда угодно. Но вот сюрприз: 90% этой простыни тебя не касается, а вся суть — в одной-двух строчках. Это stack trace (стек-трейс, «трасса вызовов»), и научиться его читать — навык, который экономит часы. Разберём, где в этой стене текста прячется настоящая ошибка.

Что такое stack trace

Когда программа падает, она не просто говорит «ошибка». Она показывает всю цепочку вызовов, которая к этой ошибке привела — кто кого вызвал, шаг за шагом, до самого места падения. Это и есть stack trace.

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

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

Почему это стопка (и куда смотреть)

Вызовы копятся стопкой, и порядок в трейсе именно такой. Но в какую сторону читать — зависит от языка, и на этом путаются все:

  • В Python трасса печатается снизу вверх по времени: самая последняя строка — «most recent call last», то есть место падения внизу. Читай снизу.
  • В JavaScript наоборот: верхняя строка — где кинуло ошибку, дальше вниз — кто это вызвал. Читай сверху.

Звучит как повод запутаться. Но есть приём, который работает в любом языке и делает направление неважным.

Приём, который экономит часы: ищи свой файл

Вот главная мысль. В трейсе перемешаны две вещи: строки из чужого кода (библиотеки, фреймворк, внутренности языка) и строки из твоего. Библиотечных обычно большинство — и они почти никогда не виноваты.

Приём: пробегись по трейсу и найди первую строку, которая указывает на ТВОЙ файл — по имени файла и папке (app.py, src/index.js, а не node_modules/... или системные пути). В 9 случаях из 10 ошибка там. Библиотека просто честно доложила: «мне передали кривые данные вот отсюда — из твоей строки 42».

То есть не пытайся понять всю стопку. Найди свою строку, открой её, посмотри на переменные вокруг. Это превращает пугающую стену в конкретную задачу: «на строке 42 в x пусто, хотя я ждал число».

Что ещё написано в ошибке

Кроме списка вызовов, у трейса есть две ценные строки — обычно в самом начале или конце:

  • Тип ошибки — короткое имя проблемы: TypeError, KeyError, NullPointerException. Уже подсказка: TypeError — что-то не того типа (ждал число, пришёл текст); KeyError — полез за полем, которого нет.
  • Сообщение — человеческое пояснение: cannot read property 'name' of undefined — «пытался взять .name у пустоты». Часто этого одного хватает, чтобы понять причину.

Связка «тип + сообщение + твоя строка» — это уже почти диагноз. Если всё равно непонятно — вот тут удобно скормить трейс ИИ: он читает такие вещи мгновенно. Как это делать с толком — в гайде как чинить баги вместе с ИИ.

Кстати, если код тебе написал сам ИИ и он падает — это нормально, код от ИИ бывает с багами, и стек-трейс — ровно тот инструмент, которым ты их ловишь. А если трейс приходит не из кода, а от сервера (500) — загляни в разбор что значит ошибка 500.

Читать сверху вниз или снизу вверх?

Зависит от языка: Python — снизу (последняя строка = место падения), JavaScript — сверху (первая строка = место падения). Но лучший приём не зависит от направления: ищи первую строку, указывающую на твой собственный файл, — она и есть цель.

ИИ написал код, а он падает — стек-трейс поможет?

Да, и это едва ли не главный сценарий. Скопируй весь трейс (не только последнюю строку) и отдай ИИ вместе с кодом файла, на который трейс указывает. По типу ошибки и номеру строки он чинит такие вещи очень быстро — быстрее, чем ты разбираешь стопку вручную.

Чем стек-трейс отличается от лога?

Лог — это то, что программа пишет по ходу работы (что происходит, шаги, значения). Стек-трейс — разовый «снимок» момента падения: полная цепочка вызовов до ошибки. Часто трейс и оказывается в логах — как запись о том, что и где сломалось.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →