현재 위치까지 어떤 경로로 함수가 호출되었는지 확인할 때 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