A stack trace (also called stack backtrace or stack traceback) is a report of the active stack frames at a certain point in time during the execution of a program.
It is commonly used during interactive and post-mortem debugging. It can also be displayed to the user of a program as part of an error message, which a user can report to a programmer.
A stack trace allows to track the sequence of nested functions called up to the point where the stack trace is generated. In a post-mortem scenario this is up to function where the failure occurred (but not necessarily is caused there). Sibling function calls are not visible in a stack trace.
As an example, the following Python program contains an error.
def a(): b() def b(): c() def c(): error() a()
Running the program under the standard Python interpreter produces the following error message.
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
The stack trace shows where the error occurs, namely in the c
function. It also shows that the c
function was called by b
, which was called by a
, which was in turn called by the code on line 10 (the last line) of the program.
Most programming languages, including Java and C# have in-built support for retrieving the current stack trace via system calls. C++ has no in-built support for doing this, but the stack trace can be retrieved with, e.g., the stacktrace library.