Трассировка стека (или обратная трассировка) — это выходные данные, которые показывают стек методов вашего приложения. Обычно вы видите его на своем терминале, когда ваше приложение сталкивается с ошибкой.

Как следует из названия, структура данных стека хранит методы в трассировке стека. Метод, с которого начинается выполнение программы, находится внизу стека, а тот, который создает трассировку стека, — вверху.

Трассировка стека может быть очень полезна при отладке кода.

Почему важна трассировка стека?

Трассировка стека — важный инструмент отладки. Он дает вам подробную информацию, такую ​​как тип ошибки, метод, в котором она произошла, строка в вашем коде, где она произошла, и путь к файлу.

Для опытного программиста эта информация является золотой жилой для понимания того, что именно пошло не так и где.

Как программист, вы также можете попросить свою программу создать трассировку стека по требованию. Это может быть особенно полезно для обслуживания кода и устранения неполадок.

Как вывести трассировку стека

instagram viewer

В зависимости от версии вашего компилятора вы, скорее всего, получите удобочитаемую трассировку. Удобочитаемая трассировка предоставляет удобный текст об ошибке, в отличие от обычной трассировки. Это особенно верно для новых компиляторов. Поэтому лучший способ узнать о трассировках стека — создать их самостоятельно.

Вы можете создать трассировку стека без каких-либо ошибок в коде. Для этого просто используйте дамп стек метод Java.яз. Нить учебный класс. Он покажет все методы, которые были вызваны, начиная с того, который вызывает dumpStack. Вызывающий метод будет тот, который находится поверх структура данных стека.

Вот пример программы, которая явно генерирует трассировку стека:

учебный классStackTraceДемо{
публичныйстатическийпустотаглавный(строка [] аргументы){
день();
}

статическийпустотадень(){
часы();
}

статическийпустотачасы(){
минут();
}

статическийпустотаминуты(){
инт а = 24 * 60;
System.out.println (+ " минут в день");
Нить.dumpStack();
}
}

Выход:

1440 минут в сутках
Ява.lang.Исключение: Кучаслед
на java.base/java.lang. Thread.dumpStack (Thread.java: 138)
вStackTraceДемо.минут(StackTraceДемо.Ява:17)
вStackTraceДемо.часы(StackTraceДемо.Ява:11)
вStackTraceДемо.день(StackTraceДемо.Ява:7)
вStackTraceДемо.главный(StackTraceДемо.Ява:3)

В этом выводе вы можете заметить, что трассировка показывает, как программа вызывала каждый Java-метод и какой номер строки в его исходном коде. Метод, создавший трассировку стека, показан в верхней части стека. Метод, вызвавший этот, находится на строке ниже и так далее.

Помимо трассировки стека

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

Вы можете улучшить обработку ошибок вашей программы, используя блок try...catch() для захвата исключений. Также важно учитывать и понимать различные типы ошибок, с которыми могут столкнуться ваши программы.