[javascript] Node.js에서 스택 추적을 인쇄하는 방법은 무엇입니까?

누구든지 Node.js에서 스택 추적을 인쇄하는 방법을 알고 있습니까?



답변

모든 Error객체에는 객체가 구성된 stack지점을 트랩 하는 멤버가 있습니다.

var stack = new Error().stack
console.log( stack )

또는 더 간단하게 :

console.trace("Here I am!")

답변

이제 콘솔전용 기능 이 있습니다.

console.trace()

답변

이미 답변했듯이 간단히 trace 명령을 사용할 수 있습니다 .

console.trace("I am here");

그러나 예외의 스택 추적을 로그하는 방법에 대해이 질문을한다면 Exception 객체를 간단히 기록 할 수 있습니다.

try {
  // if something unexpected
  throw new Error("Something unexpected has occurred.");

} catch (e) {
  console.error(e);
}

다음과 같이 기록됩니다.

오류 : 예기치 않은 문제가 발생했습니다.
    기본 (c : \ Users \ Me \ Documents \ MyApp \ app.js : 9 : 15)
    에서 Object.
    Object.Module._extensions..js (module.js : 478 : 10 )
    의 Module._compile (module.js : 460 : 26)의 (c : \ Users \ Me \ Documents \ MyApp \ app.js : 17 : 1)
)
    시작시 (node.js
    ) Function.Module.runMain (module.js : 501 : 10)의
    Function.Module._load (module.js : 310 : 12)의
    Module.load (module.js : 355 : 32) : 129 : 16)
    node.js : 814 : 3에서

Node.js 버전이 6.0.0보다 작은 경우 Exception 객체를 로깅하는 것으로 충분하지 않습니다. 이 경우 인쇄 만됩니다.

[오류 : 예기치 않은 문제가 발생했습니다.]

Node 버전 <6의 경우 현재 Node 버전과 마찬가지로 오류 메시지와 전체 스택을 인쇄하는 console.error(e.stack)대신 대신 사용 console.error(e)하십시오.

참고 : 예외가와 같은 문자열로 생성 throw "myException"되면 스택 추적을 검색 할 수 없으며 로깅 e.stackundefined를 생성 합니다.

안전을 위해 사용할 수 있습니다

console.error(e.stack || e);

이전 및 새로운 Node.js 버전에서 작동합니다.


답변

Error보다 읽기 쉬운 방식으로 콘솔에서 스택 추적을 인쇄하려면 :

console.log(ex, ex.stack.split("\n"));

결과 예 :

[Error] [ 'Error',
  '    at repl:1:7',
  '    at REPLServer.self.eval (repl.js:110:21)',
  '    at Interface.<anonymous> (repl.js:239:12)',
  '    at Interface.EventEmitter.emit (events.js:95:17)',
  '    at Interface._onLine (readline.js:202:10)',
  '    at Interface._line (readline.js:531:8)',
  '    at Interface._ttyWrite (readline.js:760:14)',
  '    at ReadStream.onkeypress (readline.js:99:10)',
  '    at ReadStream.EventEmitter.emit (events.js:98:17)',
  '    at emitKey (readline.js:1095:12)' ]

답변

쉽게 사용할 수있는 노드 모듈을 사용하면 약간의 성능 저하가 발생하더라도 노드에서 전체 길이 스택 추적을 얻을 수 있습니다. http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -추적 노드 -js


답변

Error.captureStackTrace (targetObject [, constructorOpt]) 시도하십시오 .

const myObj = {};
function c() {
  // pass
}

function b() {
    Error.captureStackTrace(myObj)
    c()
}

function a() {
    b()
}

a()

console.log(myObj.stack)

함수 ab에러 스택에서 캡처되고 저장된다 myObj.


답변

내가 알고있는 nodejs에서 전체 스택 추적을 인쇄하는 것은 불가능합니다. “부분”스택 추적을 인쇄 할 수 있습니다. 코드에서 어디에서 왔는지, 예외가 발생하는 곳에서 볼 수는 없습니다. Ryan Dahl이이 YouTube 비디오에서 설명합니다. 정확성을 위해 최소 56:30의 http://youtu.be/jo_B4LTHi3I 도움이 되었기를 바랍니다