Траса стеку

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

Див. також

Джерела

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.