node.js

[Node.js] Stack trace (스택 추적)

판교너굴맨 2021. 9. 8. 23:00

java를 쓸 때나 nodejs를 쓸 때나 console 창에 아래와 같은 에러가 발생하면 제대로 관심을 가지고 읽어보지 않을 때가 많았었다.. (과거를 반성..)

한 번 읽고 보니 친절하게 내가 어디까지 작업했는지, 어디서 에러가 났는지를 설명해주고 있다.

위의 에러를 예로 스택추적을 해보자.

먼저 우리가 아는 스택은 후입선출 (LIFO - Last In First Out)의 구조로 이루어져 있다.

 

그림을 예로 우리가 파일을 실행하고 C함수에서 에러가 발생하게 되면 C가 실행되기 전까지의 순서를 친절하게 알려줍니다 그게 바로 맨 위에 콘솔 이미지입니다.

 

이미지를 하나씩 해석하면

1. rawDataRepository.js 익명함수가 실행되었다.

2. KeeperResponse.deserializeBinary 함수가 실행되었다.

3. KeeperResponse.deserializeBinaryFromReader 함수가 실행되었다,

4. jspb.BinaryReader.readInt32 decode된 데이터를 int로 읽고 있다.

5. Object.goog.asserts.assert 데이터를 확인

6. Object.goog.asserts.doAssertFailure_ 데이터 확인 실패

7. new goog.asserts.AssertionError  asserts.AssertionError발생

 

이런 순서로 읽게 된다.

콘솔창에 나중에 실행된 함수가 먼저 출력되는 이유는 바로 위 그림에 소방관을 예로 들면

우리 코드에 에러가 난 부분을 화재가 났다고 했을 때 소방관이 맨 위에 사람(함수)부터 구출해서 이름 명단을 작성했기 때문이라고 생각하니 쉬웠다.