Что такое 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 — сверху (первая строка = место падения). Но лучший приём не зависит от направления: ищи первую строку, указывающую на твой собственный файл, — она и есть цель.
ИИ написал код, а он падает — стек-трейс поможет?
Да, и это едва ли не главный сценарий. Скопируй весь трейс (не только последнюю строку) и отдай ИИ вместе с кодом файла, на который трейс указывает. По типу ошибки и номеру строки он чинит такие вещи очень быстро — быстрее, чем ты разбираешь стопку вручную.
Чем стек-трейс отличается от лога?
Лог — это то, что программа пишет по ходу работы (что происходит, шаги, значения). Стек-трейс — разовый «снимок» момента падения: полная цепочка вызовов до ошибки. Часто трейс и оказывается в логах — как запись о том, что и где сломалось.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





