Траса стеку

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Траса стеку викликів (англ. 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].

Дивіться також[ред.ред. код]

Джерела[ред.ред. код]