Reading time·2 min
Use the Error.stack property to get the stack trace from an error.
function outer() { function inner() { const err = new Error('Something went wrong'); console.log(err.stack); } inner(); } outer();
Here is the output of logging the stack
property to the console.
The stack
property of the Error
object shows a trace of which functions were
called, in what order, in which file and on what line.
The line numbers from the message mean:
stack
property on the Error
object was logged on line 10
in the
index.js
file.9
in the inner
function.outer
function called the inner
function on line 13
in the
index.js
file.outer
function was called on line 16
in the global scope of the
index.js
file.console.trace
Alternatively, you can use the console.trace()
method.
The console.trace()
method outputs the stack trace and shows the call path
taken to reach the point at which the method was called.
function outer() { function inner() { console.trace(); } inner(); } outer();
We defined a nested function, in which we called the console.trace() method and invoked the outer function.
The method outputs the stack trace to the console if you're in the browser or to the terminal in Node.js.
The message shows the path taken to reach the point at which we called the
console.trace()
method.
inner
function was called from the outer
function, which was called from the global scope.The message also shows the name of the file in which the functions are defined.
The line numbers from the message mean:
the console.trace
method was invoked in the index.js
file on line 9
.
the inner
function called the console.trace
method on line 9
.
the outer
function called the inner
function in the index.js
file on
line 12
.
the outer
function was called in the global scope of the index.js
file on
line 15
.
Which approach you pick is a matter of personal preference. I'd use the
console.trace
method because it's standardized between browsers.
If you use the stack
property, your results may vary between browsers and
some browsers might drop support for it or not implement it as it is a
non-standard property.
You can learn more about the related topics by checking out the following tutorials: