[Javascript] Stacktrace, Callstack 출력 방법
April 06, 2024
현재 위치까지 어떤 경로로 함수가 호출되었는지 확인할 때 Stacktrace를 출력하여 디버깅을 할 수 있습니다. 기본적으로 console.log()
로 디버깅을 할 수 있지만, stack trace 정보를 출력하진 않습니다.
Stack trace를 출력하는 방법에 대해서 알아보겠습니다.
1. console.trace()를 이용한 방법
console.trace(msg)
는 메시지와 함께 호출 시점의 call stack을 출력합니다.
아래와 같은 함수 호출 구조에서 trace를 출력해보면 다음과 같이 콜스택이 출력되어, 어떤 함수에서 호출되었는지 확인할 수 있습니다.
function foo() {
console.trace("Trace from foo():");
console.log("Inside foo()");
bar();
}
function bar() {
console.trace("Trace from bar():");
console.log("Inside bar()");
}
foo();
Output:
Error:
Trace: Trace from foo():
at foo (/home/mjs/js_project/examples/node_03f5dfad91274.tmp.js:2:11)
at Object.<anonymous> (/home/mjs/js_project/examples/node_03f5dfad91274.tmp.js:12:1)
at Module._compile (node:internal/modules/cjs/loader:1218:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Module._load (node:internal/modules/cjs/loader:922:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Inside foo()
Error:
Trace: Trace from bar():
at bar (/home/mjs/js_project/examples/node_03f5dfad91274.tmp.js:8:11)
at foo (/home/mjs/js_project/examples/node_03f5dfad91274.tmp.js:4:3)
at Object.<anonymous> (/home/mjs/js_project/examples/node_03f5dfad91274.tmp.js:12:1)
at Module._compile (node:internal/modules/cjs/loader:1218:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Module._load (node:internal/modules/cjs/loader:922:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
2. console.error()를 이용한 방법
console.error(msg, error)
는 msg와 함께 error를 출력합니다. error에는 콜스택 정보를 갖고 있어, 출력 시 stacktrace를 출력할 수 있습니다.
console.log(msg, error)
도 동일하게 스택 트레이스가 출력됨
function divide(a, b) {
if (b === 0) {
throw new Error("Division by zero");
}
return a / b;
}
try {
const result = divide(10, 0);
console.log("Result:", result);
} catch (error) {
console.error("An error occurred:", error);
}
Output:
Error:
An error occurred: Error: Division by zero
at divide (/home/mjs/js_project/examples/node_c0fbf0ffe079b.tmp.js:3:11)
at Object.<anonymous> (/home/mjs/js_project/examples/node_c0fbf0ffe079b.tmp.js:9:18)
at Module._compile (node:internal/modules/cjs/loader:1218:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Module._load (node:internal/modules/cjs/loader:922:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47