Траса стеку
Траса стеку викликів (англ. stack trace або ж англ. stack backtrace) — це звіт про активні стекові кадри (активаційні записи) в певній точці програми під час її виконання.
Найбільш часто застосовується при інтерактивному та післякраховому зневадженні. Траса стеку може виводитися користувачу програми як частина повідомлення про помилку, яку користувач може передати програмісту.
Траса стеку дозволяє відслідкувати послідовність вкладених викликів функцій до точки де траса стеку генерується. При післякраховому сценарію до точки функції, де відбувся збій. Деякі виклики специфічних функцій у трасі стеку не відображаються (sibling function).
Приклад на Python
Для прикладу наступна програма на Python містить помилку
def a():
b()
def b():
c()
def c():
error()
a()
Запуск програми під стандартним інтерпретатором Python породжує наступне повідомлення про помилку:
Traceback (most recent call last): File "tb.py", line 10, in <module> a() File "tb.py", line 2, in a b() File "tb.py", line 5, in b c() File "tb.py", line 8, in c error() NameError: global name 'error' is not defined
В трасі стеку вказано, що помилка відбулась у функції з назвою c
, функція c
була викликана функцією b
, яка в свою чергу викликалася функцією a
, яка в свою чергу була викликана з 10 рядка коду (останнього рядка) програми.
Підтримка мовами програмування
Більшість мов програмування, включаючи Java та C# мають вбудовану підтримку для отримання поточної траси стеку через системні виклики. C++ не має вбудованої підтримки для цього, проте його можна отримати, наприклад, з допомогою відповідних бібліотек (stacktrace).
В java найчастіше доводиться працювати з трасою стеку при обробці винятків[1].
Див. також
Джерела
- Бернакевич І. Є., Вагін П. П. Програмування мовою Java: використання фундаментальних класів: Тексти лекцій. -Львів: Видавничий центр ЛНУ імені Івана Франка, 2002. — 48с. Архів оригіналу за 2 листопада 2013. Процитовано 2 листопада 2013.